在本文中,我们将详细介绍【Docker实战之入门】Dockerfile详细分析:构建docker镜像的各个方面,并为您提供关于1基础镜像centos7的相关解答,同时,我们也将为您带来关于docker
在本文中,我们将详细介绍【Docker实战之入门】Dockerfile详细分析:构建docker镜像的各个方面,并为您提供关于1基础镜像centos7的相关解答,同时,我们也将为您带来关于docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、Docker | docker实战(三):使用Docker镜像(读书笔记)、docker(六) 使用docker-maven-plugin插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)的有用知识。
本文目录一览:- 【Docker实战之入门】Dockerfile详细分析:构建docker镜像(1)基础镜像centos7
- docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数
- Docker | docker实战(三):使用Docker镜像(读书笔记)
- docker(六) 使用docker-maven-plugin插件构建docker镜像
- docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)
【Docker实战之入门】Dockerfile详细分析:构建docker镜像(1)基础镜像centos7
Dockerfile
Docker是软件工业上的集装箱技术。
通过以下文件制作Docker
镜像
[root@Optimus docker-training]# cd centos7/
[root@Optimus centos7]# ls
aliyun-epel.repo aliyun-mirror.repo Dockerfile supervisord.conf
Dockerfile
自动构建docker镜像的配置文件,类似于Linux下shell命令。
[root@Optimus centos7]# vim Dockerfile
MAINTAINER Carson,C.J.Zeong zcy@nicescale.com
DOCKER-VERSION 1.6.2
Dockerizing CentOS7: Dockerfile for building CentOS images
FROM centos:centos7.1.1503
MAINTAINER Carson,C.J.Zeong zcy@nicescale.comENV TZ "Asia/Shanghai"
ENV TERM xtermADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo
ADD aliyun-epel.repo /etc/yum.repos.d/epel.repoRUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
yum install -y --enablerepo=epel pwgen python-pip && \
yum clean allRUN pip install supervisor
ADD supervisord.conf /etc/supervisord.confRUN mkdir -p /etc/supervisor.conf.d && \
mkdir -p /var/log/supervisorEXPOSE 22
ENTRYPOINT ["/usr/bin/supervisord","-n","-c","/etc/supervisord.conf"]
[FROM
]指令指定基础镜像(副镜像)centos:centos7.1.1503
.
[MAINTAINER
]说明docker
镜像的维护者。
[ENV
](environment
环境)这里设置了时区的环境变量TZ "Asia/Shanghai"
,环境变量可以多个。
[ADD
] 在Dockerfile
中有两条指令可以进行copy文件,一个是ADD
,一个是copY
。都可以复制本地文件到container中。
ADD比copY多两个功能:
1. 可以ADD一个在WebServer上的文件,在ADD后面aliyun-mirror.repo处直接写上链接地址,即可把文件copy到container(/etc/yum.repos.d/CentOS-Base.repo)里面。
2. 解压:有一个压缩包,不用进入到container中运行tar命令手动解压,用ADD命令可以自动解压。
[RUN
] 指令后面可以写任何一条命令,RUN
会将该命令放到Linux Shell下去执行。在这里,RUN
指令用来安装一些基础的工具和软件。
在Dockerfile build docker镜像的时候,每执行一条指令,都会生成docker镜像的一层(分层layer技术),最后生成的镜像由很多个layer组合而成。
[RUN pip install supervisor
] 在制作docker镜像的时候,会考虑到制作完成后能运行一个什么样的容器,如运行一个PHP服务或者Linux服务。那么,此时需要一个进程管理工具supervisor来管理进程。运行单个进程可以不用supervisor。
[ADD supervisord.conf /etc/supervisord.conf
] 添加supervisor的配置文件到/etc目录下。
[RUN mkdir -p /etc/supervisor.conf.d
]创建supervisor.conf.d目录,在这里存放启动其他服务的配置文件。/var/log/supervisor
是存放supervisor的日志目录。
[EXPOSE 22
] 比如container想暴露22端口给宿主机,宿主机会拿一个端口与container的22端口去映射,如2222端口号,那么可以使用服务器的IP地址,连接的时候端口号是2222,就可以连接到container(docker容器)里面。
[ENTRYPOINT
] 在dockerfile中只有最后一条ENTRYPOINT
会生效。container每次启动的时候,都会执行该命令。/usr/bin/supervisord","/etc/supervisord.conf
开启supervisor服务,加载主要的配置文件。
使用dockerfile生成docker镜像
docker build
给要构建的docker镜像起一个名字
docker build -t
docker镜像完整的命名规则
docker build -t registry_url/namespace/csphere/centos:7.1
版本号
centos:版本号
若不写版本号,则会自动加上latest标签默认为 centos:latest
指定dockerfile
docker build -t csphere/centos:7.1 .
若dockerfile在当前目录下,则使用 .来指定;否则使用相对路径/path.
查看镜像
docker images
可以查看本地有哪些镜像,镜像的名字REPOSTORY、TAG、IMAGE ID、创建时间CREATED、镜像大小VIRTUA.
生成docker容器
docker run
通过以上创建好的docker镜像,执行run指令可生成docker容器。(此时退出/centos7目录,回到根目录下)
查看run参数
docker help run
查看run有哪些参数
交互式模
docker run -it
启动docker容器container时 是交互式模式,把container启动到前台。
后端启动
docker run -d
把container在后端启动,启动后,返回一个container的ID号。
端口映射-P
docker run -d -P 2222:222
在dockerfile中有一个指令EXPOSE 22,暴露出22号端口。在前端,宿主机会分配一个没有使用的端口号,如2222,来进行端口映射。那么,可以用2222端口连接container。如果有服务器需要维护重启时,container也会重启,此时2222端口会发生变化,仍然会随机拿一个没有使用的端口号来和22号端口做端口映射。
端口映射-p
docker run -d -p 2222:22
不管是宿主机重启还是container重启,2222端口一直给这个container。除非该container删掉后,2222端口号会被分配给其他container使用。
容器名
docker run -d -p 2222:22 --name base
在通过docker镜像生成docker容器时,--name用于给容器起名字,这里起名为base,方便以后查找。
指定docker镜像
docker run -d -p 2222:22 --name base csphere/centos:7.1
指明docker镜像,这里使用csphere/centos:7.1 docker镜像生成叫做
base
的docker容器。返回container的长ID号,如2d36dbfc72a045725b845771bdeb8ff0acc0845eb7d39d09e5f8025237b0d9c9。
查看container
docker ps -a
不加参数时,默认只会显示处于running下的container。-a可查看退出状态下/非up状况下的container等当前本地所有的container。
docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数
介绍:
~]# docker history --help
Usage: docker history [OPTIONS] IMAGE
Show the history of an image
Options:
--format string Pretty-print images using a Go template
--help Print usage
-H,--human Print sizes and dates in human readable format (default true)
--no-trunc Don't truncate output
-q,--quiet Only show numeric IDs
示例:
~]# docker history kubeguide/tomcat-app:v1
IMAGE CREATED CREATED BY SIZE COMMENT
a29e200a18e9 2 years ago /bin/sh -c #(nop) ADD dir:c5c3bddef49cbc9f... 992kB
<missing> 2 years ago /bin/sh -c #(nop) MAINTAINER bestme <bestm... 0B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0B
<missing> 2 years ago /bin/sh -c set -e && nativeLines="$(catal... 0B
<missing> 2 years ago /bin/sh -c set -x && curl -fSL "$TOMCAT_... 16.6MB
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.0.35 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8 0B
<missing> 2 years ago /bin/sh -c set -ex && for key in 05AB33... 114kB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 7.18MB
<missing> 2 years ago /bin/sh -c { echo 'deb http://httpredir.... 172B
<missing> 2 years ago /bin/sh -c #(nop) ENV OPENSSL_VERSION=1.0.... 0B
<missing> 2 years ago /bin/sh -c #(nop) workdir /usr/local/tomcat 0B
<missing> 2 years ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomc... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/l... 0B
<missing> 2 years ago /bin/sh -c set -x && apt-get update && a... 163MB
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_VERSION=7u101 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/j... 0B
<missing> 2 years ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87B
<missing> 2 years ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 1.17MB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 44.3MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:5d8521419ad6cfb... 125MB
如果要让CREATED BY 列完整显示,可以加上 --no-trunc 参数。直接在shell中看会比较乱,可以输出到文件查看,就比较直观了
以PHPmyadmin docker镜像为例,效果如下:
Docker | docker实战(三):使用Docker镜像(读书笔记)
第三章 使用Docker镜像
3.1 获取镜像
镜像是运行容器的前提, 官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放下载。 本节主要介绍 pecker镜像的pull子命令。
可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命令的格式为
docker [image] pull NAME [ :TAG] 。
其中,NAME是镜像仓库名称(用来区分镜像),TAG是镜像的标签(往往用来表示版本信息)。 通常情况下,描述一个镜像需要包括 “名称+标签“ 信息。
例如, 获取一个Ubuntu 18.04 系统的基础镜像可以使用如下的命令:
docker pull ubuntu: 18.04.18.04: Pulling from library/ubuntu Digest:sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696
Status: Downloaded newer image for ubuntu:18.04
对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择la迳釭标签,这会下载 仓库中最新版本的镜像。
下面的例子将从DcoekrHub 的Ubuntu仓库 下载一个最新版本的Ubuntu操作系统的镜像:
该命令实际上下载的就是 ubuntu:latest镜像。
下载过程中可以看出 ,镜像文件一般由若干层(layer)组成 ,6c953ac5d795这样的 串是层的唯一id(实际上完整的id包括256比特,64个十六进制字符组成)。使用docker pull命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存 储了层的 一份内容,减小了存储空间。
读者可能会想到,在不同的镜像仓库服务器的情况下,可能会出现镜像重名的情况。
严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry, 注册服务器)作为前缀,只是默认使用的是官方dockerhub服务 ,该前缀可以忽略。
例如,docker pull ubuntu:18.04命令相当千docker pull registry.hub. docker.com/ubuntu:18.04命令,即从默认的注册服务器DcoekrHub Registry中的 ubuntu 仓库来下载标记为18.04的镜像。
如果从非官方 的仓库下载,则 需要在仓库 名称前指定完整的仓库地址。例如从网易蜂巢 的镜像源来下载ubuntu:18.04镜像,可以使用如下命令,此时下载的镜像名称 为hub. c.163.com/public/ubuntu:18.04:
docker pull hub.c.163.com/public/ubuntu:18.04
pull 子命令支持的选项主要包括:
-a, --all士ags=trueifalse:是否获取仓库中的所有镜像,默认为否; --disable-con七ent-trus七:取消镜像的内容校验,默认为真。
另外,有 时需要使用镜像代理服务来加速Docker镜像获取 过程 ,可以在Docker服务 启动配置中增加 --registry-mirror=proxy_URL来指定镜像代理服务地址(如https:// registry.docker-en.com)
下载镜像到本地后, 即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运 行bash应用, 执行打印 "Hello World"命令:
docker run -it ubuntu:18.04 bash
3.2 查看镜像信息
本节主要介绍Docker镜像的ls、tag和inspect子命令。
- 使用images命令列出镜像
docker images
在列出信息中, 可以看到几个字段信息:
来自于哪个仓库, 比如ubuntu表示ubuntu 系列的基础镜像;
SIZE 79.6MB 79.6MB镜像的标签信息, 比如 18.04、 latest表示不同的版本信息。 标签只是标记, 并不能标识镜像内容; 镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一 个镜像, 只是具有不同标签名称而已; 创建时间,说明镜像最后的更新时间; 镜像大小,优秀的镜像往往体积都较小。
其中镜像的ID信息十分重要, 它唯一标识了镜像。在使用镜像ID的时候, 一般可以使 用该ID的前若干个字符组成的可区分串来替代完整的ID。
TAG 信息用于标记来自同一个仓库的不同镜像。 例如ubuntu 仓库中有多个镜像, 通过 TAG 信息来区分发行版本, 如18.04、 18.10 等。
镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存 储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和。
images子命令主要支持如下选项
-a, --all =true I false: 列出所有(包括临时文件)镜像文件,默认为否; --digests=true | false: 列出镜像的数字摘要值,默认为否; -f, --filter=[] : 过滤列出的镜像,如dangling 式rue 只显示没有被使用的镜像;也可指定带有特定标注的镜像等; --format=“TEMPLATE” : 控制输出格式,如. ID代表ID信息,.Repository 代表仓库信息等; --no-trunc=true | false: 对输出结果中太长的部分是否进行截断,如镜像的ID 信息,默认为是; -q, --quiet=true | false: 仅输出ID信息, 默认为否。
其中, 还支持对输出结果进行控制的选项,如 -f. --fil七er=[)、–no七rune= 七rueI false、 -q、 --quie七式rueI false等。
更多子命令选项还可以通过mandocker-images来查看。
- 使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任 意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签:
docker tag ubuntu:latest myubuntu:latest
再次使用docker images列出本地主机上镜像信息, 可以看到多了一个myubun口: lates七标签的镜像:
之后,用户就可以直接使用myubuntu:la七es七来表示这个镜像了。
细心的读者可能注意到, 这些myubuntu:latest镜像的ID跟ubunt:latest是 完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添 加的标签实际上起到了类似链接的作用。
- 使用inspect命令查看详细信息
使用 docker [image] inspect 命令可以获取该镜像的详细信息,包括制作者、适 应 架构、各层的数字摘要等:
上面代码返回的是一个 JSON 格式的消息, 如果我们只要其中一项内容时, 可以使 用 -f 来指定, 例如, 获取镜像的Architecture:
docker [image] inspec七 -f { {" .Architecture"}} ubuntu:18.04
- 使用 history 命令查看镜像历史
既然镜像文件由多个层组成, 那么怎么知道各个层的内容具体是什么呢?这时候可以使 用 history 子命令, 该命令将列出各层的创建信息。 例如,查看 ubuntu: 18. 04 镜像的创建过程,可以使用如下命令:
docker history ubuntu: 18. 04
注意,过长的命令被自动截断了, 可以使用前面提到的 --no-trunc选项来输出完整命令。
docker(六) 使用docker-maven-plugin插件构建docker镜像
目录
- 一、 使用docker-maven-plugin构建镜像
- 二、使用
- 三、绑定Docker 命令到 Maven 各个阶段
可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974
docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。
docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin
dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven
一、 使用docker-maven-plugin构建镜像
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
<!-- docker-maven-plugin插件(不带Dockerfile文件) --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!--用于指定镜像名称--> <imageName>${project.name}:${project.version}</imageName> <!--用于指定基础镜像,相当于Dockerfile中的FROM指令--> <baseImage>java</baseImage> <!--相当于Dockerfile的ENTRYPOINT指令--> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <!--是否跳过docker build--> <skipDockerBuild>true</skipDockerBuild> <resources> <resource> <targetPath>/</targetPath> <!--用于指定需要复制的根目录,${project.build.directory}表示target目录--> <directory>${project.build.directory}</directory> <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://<host>:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
<!--docker-maven-plugin插件(带Dockerfile文件)--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.name}:${project.version}</imageName> <!--Dockerfile文件位置--> <dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
二、使用
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag回到顶部
三、绑定Docker 命令到 Maven 各个阶段
docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)
可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974
docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。
docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin
dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven
一、 使用docker-maven-plugin构建镜像
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
<!-- docker-maven-plugin插件(不带Dockerfile文件) -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!--用于指定镜像名称-->
<imageName>${project.name}:${project.version}</imageName>
<!--用于指定基础镜像,相当于Dockerfile中的FROM指令-->
<baseImage>java</baseImage>
<!--相当于Dockerfile的ENTRYPOINT指令-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--是否跳过docker build-->
<skipDockerBuild>true</skipDockerBuild>
<resources>
<resource>
<targetPath>/</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://<host>:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
<!--docker-maven-plugin插件(带Dockerfile文件)-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.name}:${project.version}</imageName>
<!--Dockerfile文件位置-->
<dockerDirectory>docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
二、使用
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag
三、绑定Docker 命令到 Maven 各个阶段
关于【Docker实战之入门】Dockerfile详细分析:构建docker镜像和1基础镜像centos7的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、Docker | docker实战(三):使用Docker镜像(读书笔记)、docker(六) 使用docker-maven-plugin插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)的相关知识,请在本站寻找。
本文标签: