Docker入门命令详解(下)

简介: Docker入门命令详解(下)

五、制作Java镜像

1.下载JDK8

2.复制JDK8到主目录的software文件夹下

3.启动容器

docker run -i -t -v[逸虚凌辰7]  /software:/mnt/software centos /bin/bash


此时进入容器中,会在mnt/software中发现我们复制的JDK


解压JDK,安装到/opt目录下


tar -zxf [逸虚凌辰8] /mnt/software/jdk-8u191-linux-x64.tar.gz -C/opt


建立jdk快捷方式


ln -s [逸虚凌辰9] /opt/jdk1.8.0_191 /opt/jdk


ll /opt/jdk


验证jdk版本


/opt/jdk/bin/java -version


4.提交镜像

另外打开一个终端,查看当前容器。


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


583c6bbdf18e        centos              "/bin/bash"         19 minutes ago      Up 19 minutes                           optimistic_chandrasekhar


docker commit 583c6bbdf18e prim/java


然后查看镜像就会看到我们生成的镜像。


5.验证镜像

docker run --rm[逸虚凌辰10]  prim/java /opt/jdk/bin/java -version


六、使用Dokcerfile构建镜像

1. Dockerfile结构

Dockerfile是编写Docker镜像的脚本


设置基础镜像

FROM:centos:latest

FROM指令的固有格式“仓库名:标签名”

设置维护者信息

可以指定镜像由谁创建的,由谁维护的

MAINTAINER “Yang Rui”yangrui@xxx.com

设置需要添加到容器中的文件

ADD jdk-8u91-linux-x64.tar.gz /opt

ADD指令的第一个参数为宿主机的来源地址(可使用相对路径)第二个是容器的目标路径(必须为绝对路径)使用ADD命令,将自动解压来源路径中的压缩包,将解压后的文件复制到目标路径中。一般将Dockerfile文件和需要添加到容器的文件放在同一目录,有助于编写路径来源。

设置镜像制作过程中执行的命令

例如创建链接

RUN ln -s /opt/jdk1.8.0_91 /opt/jdk

如果要使用多条命令可以写多条RUN。但是可以将多条命令通过\命令换行符合并成一条,可以减少镜像的体积。原因是镜像每执行一条命令就会形成新的“镜像层”

设置容器启动时所需要执行的命令

我们使用docker run是,可以在命令的最后一段添加一个容器启动时需要执行的命令,在Dockerfile中也有对应的CMD指令。

CMD /opt/jdk/binjava -version

如果我们在docker run命令是指定了需要执行的命令,那么该命令将覆盖Dockerfile中的CMD命令。

Dockerfile中还有一个与CMD指令类似的ENTRYPOINT指令,它不能被覆盖。

CMD指令要么没有,要么只有一条。

2.使用Dockerfile构建镜像

进入到jdk所在的目录,然后构建Dockerfile文件


cd /software


touch [逸虚凌辰11] Dockerfile


vim Dockerfile


添加如下构建文件


FROM centos:latest


MAINTAINER "Yang Rui"


ADD /software/jdk-8u191-linux-x64.tar.gz /opt


RUN ln -s /opt/jdk1.8.0_91 /opt/jdk


CMD /opt/jdk/bin/java -version


然后执行构建镜像命令


docker build -t[逸虚凌辰12]  yangrui/java .[逸虚凌辰13]


使用tag命令重命名一样的镜像


docker tag e0b70251236c prim/java:1.0


一般情况下,安装完JDK后,我们需要配置JAVA_HOME和Path环境变量才能在命令中使用Java命令。在Dockerfile中我们可以使用Env指令来设置所需的环境变量。


指定JAVA_HOME和PATH


FROM centos:latest


MAINTAINER "Yang Rui"


ADD jdk-8u191-linux-x64.tar.gz /opt


RUN ln -s /opt/jdk1.8.0_91 /opt/jdk


ENV JAVA_HOME /opt/jdk


ENV PATH JAVAHOME/bin:JAVA_HOME/bin:PATH


CMD java -version


3.Dockerfile指令汇总

Dockerfile指令


描述


FROM


设置基础镜像


MAINTAINER


设置维护者信息


ADD


设置需要添加到容器中的文件(自动解压)


COPY


设置需要复制到容器中的文件(无法解压)


USER


设置运行RUN指令的用户


ENV


设置环境变量,可在RUN指令中运用这些变量


ENTRYPOINT


设置容器启动时需要运行的命令(无法覆盖)


CMD


设置容器启动时需要执行的命令(可以被覆盖)


WORKDIR


设置进入容器时的工作目录


EXPOSE


设置壳被暴露的端口号(用于端口映射)


VOLUME


设置可被挂在的数据卷(用于目录映射)


ONBUILD


设置在构建时需要自动执行的指令


七、使用DockerRegistry管理镜像

1.使用DockerHub

使用翻墙软件(蓝灯)注册dockerhub,然后登陆创建自己的Repository。


docker login


登陆dockerhub


docker push prim/java


把本地镜像上传至自己的镜像仓库


2.搭建Docker Registry

启动Dockers Registry


如果是使用的阿里云ECS,要提前在安全组开放端口50000


docker run -d[逸虚凌辰14]  -p[逸虚凌辰15]  50000:5000 -v[逸虚凌辰16]  ~/[逸虚凌辰17] docker-registry:/tmp/registry registry


此时docker ps可以查看registry已经在容器运行了。


然后,浏览器输入http://59.110.142.242:50000/v2/_catalog


如果有json返回则说明仓库搭建成功。


vim  /usr/lib/systemd/system/docker.service


    增加 ExecStart=/usr/bin/dockerd  --insecure-registry 59.110.142.242:50000


然后重启服务,加载仓库配置


systemctl daemon-reload


systemctl restart docker


重命名镜像标签


由于我们创建的镜像默认注册中心是DockerHub,使用Docker push命令推送的目的地址都是DockerHub,我们需要更改镜像的标签。添加59.110.142.242:50000/


docker tag b4401d8b4a2a 59.110.142.242:50000/prim/java


推送镜像到私有仓库


docker push 59.110.142.242:50000/prim/java


私有仓库还可以指定用户名密码,在同一局域网上可以拉取仓库的镜像。


还可以将DockerRegistry与Nginx集成将他们部署到一台稳定的服务器上,通过Nginx反响代理的方式来调用Docker Registry,并将IP绑定到一个内部域名上,比如docker-registry.xxx.com,这样局域网内部的用户可以通过该域名访问DockerRegistry。


八、Tips

1. 调整Docker内存限制

docker stats


使用-m指定内存大小


docker run -d -p 8080:8010 -m 512m 172.0.0.1:5000/demoe.msa/msa-api-hello:1.0.0


[逸虚凌辰1]Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。


tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件


使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中,输入如下命令


$ tee file1 file2


[逸虚凌辰2]表示启动容器后,打开标准收入设备,可使用键盘进行输入。开启了input(输入)功能


[逸虚凌辰3]表示启动容器后,分配一个伪终端TTY,将与服务器建立一个会话。


[逸虚凌辰4]表示将要运行的镜像名称


[逸虚凌辰5]表示运行容器中的bash应用程序,进入到系统中


[逸虚凌辰6]以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等。



[逸虚凌辰7]把宿主的磁盘挂载到容器中,可以理解为目录映射。



[逸虚凌辰8]-c :建立一个压缩文件的参数指令(create 的意思);


-x :解开一个压缩文件的参数指令!


-t :查看 tarfile 里面的文件!


特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!


因为不可能同时压缩与解压缩。


-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?


-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?


-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!


-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!


  例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成


  『 tar -zcvPf tfile sfile』才对喔!


-p :使用原文件的原来属性(属性不会依据使用者而变)


-P :可以使用绝对路径来压缩!


-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!


--exclude FILE:在压缩的过程中,不要将 FILE 打包!


[逸虚凌辰9]为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件


[逸虚凌辰10]表示容器退出时可自动删除容器,也就是说在执行完我们的查看版本命令后容器自动退出。


[逸虚凌辰11]如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;

如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。

touch 命令详解

功能说明:改变文件或目录时间。


语 法:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时间][文件或目录...]


补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。


参 数:

-a或--time=atime或--time=access或--time=use 只更改存取时间。

-c或--no-create 不建立任何文件。

-d<时间日期> 使用指定的日期时间,而非现在的时间。

-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

-m或--time=mtime或--time=modify 只更改变动时间。

-r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。

-t<日期时间> 使用指定的日期时间,而非现在的时间。

--help 在线帮助。

--version 显示版本信息


[逸虚凌辰12]指定构建镜像的名字


[逸虚凌辰13]表示当前目录


[逸虚凌辰14]表示将在后台启动该容器。


[逸虚凌辰15]表示对容器中暴露的端口进行端口映射,冒号左边为宿主机端口,右边为容器内部需要暴露的端口

[逸虚凌辰16]挂在本地磁盘到容器磁盘

[逸虚凌辰17]表示当前目录

目录
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
24天前
|
安全 Docker 容器
|
24天前
|
网络安全 数据安全/隐私保护 Docker
|
23天前
|
存储 监控 安全
|
7天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
13天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
50 2
|
20天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
31 3
|
23天前
|
存储 关系型数据库 MySQL
|
25天前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
45 2
|
1月前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。