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)最后查看构建结果
(5)查看镜像
(6)启动镜像
(7)查看当前目录,发现启动镜像后直接进入了我们在mydockerfile文件里用WORKDIR指令设置的工作目录而不再是根目录
基础的centos镜像:
配置了工作目录的mycentos镜像:
(8)测试我们在用RUN指令下载的vim命令是否能用
基础的centos镜像:
以centos镜像为基础,下载了vim命令的mycentos镜像:
(9)通过以下命令查看镜像的历史构建记录
docker history 镜像id或镜像名称
例:
其他:
1、CMD和ENTRYPOINT的区别
CMD:
(1)新建一个名为mydockerfile-test-cmd的DockerFile,内容如下
FROM centos:7
CMD ["ls","-a"]
(2)通过mydockerfile-test-cmd文件构建Docker镜像
(3) 启动mycentos-test-cmd镜像
(4)往mycentos-test-cmd镜像追加其他命令(在docker run命令行中输入命令会覆盖掉原来的CMD命令)
错误的追加命令方式:
ENTRYPOINT:
(1)新建一个名为mydockerfile-test-entrypoint的DockerFile,内容如下
FROM centos:7
ENTRYPOINT ["ls","-a"]
(2)通过mydockerfile-test-entrypoint文件构建Docker镜
(3) 启动mycentos-test-entrypoint镜像
(4)往mycentos-test-entrypoint镜像追加其他命令(在docker run命令行中输入命令不容易被覆盖掉原来的ENTRYPOINT命令,且能在原有的ls -a命令后为ENTRYPOINT命令追加参数)
创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。