1、概念

DockerFile是用来构建Docker镜像的构建文件,是一段命令脚本

2、基础知识 

(1)每个保留关键字都必须是大写字母

(2)执行顺序从上往下

(3)#表示注释

(4)每一个指令都会创建提交一个新的镜像层并提交

3、DockerFile指令

FROM       #基础镜像
MAINTAINER #维护者信息(姓名+邮箱)
RUN        #镜像构建的时候需要运行的命令
ADD        #拷贝文件,会自动解压
WORKDIR    #设置镜像的工作目录
VOLUME     #设置卷,挂载主机目录
EXPOSE     #对外暴露的端口
CMD        #指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
ENTRYPOINT #指定这个容器启动的时候要运行的命令(可以追加命令)
ONBUILD    #ONBUILD是一个特殊的指令它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
COPY       #类似ADD,将我们的文件拷贝到镜像里
ENV        #构建的时候设置环境变量

4、使用DockerFile构建一个CentOS镜像

(1)新建一个名为mydockerfile的DockerFile

vim mydockerfile

(2)配置mydockerfile文件的脚本命令

#基础镜像
FROM centos:7

#维护者信息(姓名+邮箱)
MAINTAINER ken<邮箱地址>

#设置环境变量,环境变量名为MYPATH的路径为/usr/local,在关键字ENV后通过一个名字对应一个路径来创建环境变量
ENV MYPATH /usr/local

#设置镜像的工作目录
WORKDIR $MYPATH

#镜像构建的时候需要运行的命令(因为基础的centos镜像没用vim命令,但希望自己构建的centos镜像能使用vim命令,所以在RUN后写需要运行的命令)
RUN yum -y install vim

#对外暴露的端口
EXPOSE 80

#指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

(3)通过mydockerfile文件构建Docker镜像

#选项及解释
-f表示DockerFile文件的所在路径
-t的t是tag,表示生成的镜像的名称和版本号
.表示当前构建时上下文的路径为当前目录

docker build -f mydockerfile -t mycentos:0.1 .

(4)最后查看构建结果

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_docker

(5)查看镜像

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_02

(6)启动镜像

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_03

(7)查看当前目录,发现启动镜像后直接进入了我们在mydockerfile文件里用WORKDIR指令设置的工作目录而不再是根目录

基础的centos镜像:

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_容器_04

配置了工作目录的mycentos镜像:

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_容器_05

(8)测试我们在用RUN指令下载的vim命令是否能用

基础的centos镜像:

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_运维_06

以centos镜像为基础,下载了vim命令的mycentos镜像:

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_运维_07

(9)通过以下命令查看镜像的历史构建记录

docker history 镜像id或镜像名称

例: 

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_08

其他:

1、CMD和ENTRYPOINT的区别

CMD:

(1)新建一个名为mydockerfile-test-cmd的DockerFile,内容如下

FROM centos:7
CMD ["ls","-a"]

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_09

(2)通过mydockerfile-test-cmd文件构建Docker镜像

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_10

(3) 启动mycentos-test-cmd镜像

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_docker_11

(4)往mycentos-test-cmd镜像追加其他命令(在docker run命令行中输入命令会覆盖掉原来的CMD命令)

 

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_docker_12

错误的追加命令方式:

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_运维_13

ENTRYPOINT:

 (1)新建一个名为mydockerfile-test-entrypoint的DockerFile,内容如下

FROM centos:7
ENTRYPOINT ["ls","-a"]

 

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_14

(2)通过mydockerfile-test-entrypoint文件构建Docker镜

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_docker_15

(3) 启动mycentos-test-entrypoint镜像

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_centos_16

(4)往mycentos-test-entrypoint镜像追加其他命令(在docker run命令行中输入命令不容易被覆盖掉原来的ENTRYPOINT命令,且能在原有的ls -a命令后为ENTRYPOINT命令追加参数)

 

dockerfile 并发构建多镜像 docker通过dockerfile构建镜像命令_dockerfile 并发构建多镜像_17

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。