一、是什么
1、DOckerFile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本
2、构建三步骤:编写DockerFile文件---docker build---docker run
二、DockerFile构建过程解析
1、DockerFile内容基础知识
① 每条保留字指令都必须为大写字母并且后面要跟至少一个参数
② 指令按照从上到下顺序执行
③ # 表示注释
④ 每条指令都会去创建一个新的镜像层,并对镜像进行提交
2、docker执行DockerFile的大致流程
① docker从基础镜像运行一个容器
② 执行一条指令并对容器进行修改
③ 执行类似docker commit的操作提交一个新镜像层
④ docker再基于刚提交的镜像运行一个新容器
⑤ 执行DockerFile中的下一条指令知道指令都完成
三、DockerFile体系结构(保留字指令:必须大写)
1、FROM:基础镜像,当前新镜像是基于哪个镜像的
2、MAINTAINER:镜像维护者的姓名和邮箱地址
3、RUN:容器构建时需要运行的命令
4、EXPOSE:当前容器对外暴露的端口号
5、WORKDIR:指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
6、ENV:用来在构建镜像过程中设置环境变量
7、ADD:将宿主机目录下的文件拷贝进镜像且add命令会自动处理URL和解压tar压缩包
8、COPY:类似add,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录,复制到新的一层镜像内的<目标路径>位置
9、VOLUME:容器数据卷,用于数据保存和持久化工作
10、CMD:指定一个容器启动时要运行的命令,DockerFile中可以有多个cmd命令,但只有最后一个生效,cmd会被docker run之后的命令替换
11、ENTRYPOINT:指定一个容器启动时要运行的命令,entrypoint的目的和cmd一样,都是在指定容器启动程序及参数
12、ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发
四、案例
1、Base镜像(scratch):Docker Hub中99%的镜像都是通过在Base镜像中安装和配置需要的软件构建出来的。
2、自定义mycentos
Docker Hub默认centos镜像是:初始centos默认工作目录是根;默认不支持vim;默认不支持ifconfig;
① 编写DockerFile文件
FROM centos-----继承本地centos镜像
ENV MYPATH /usr/local-----设置变量MYPATH
WORKDIR $MYPATH-----设置进入容器后的落脚点为变量MYPATH的值
RUN yum install vim -y-----新镜像要安装vim编辑器
RUN yum install net-tools -y-----新镜像要安装net-tools
EXPOSE 80-----新镜像对外暴露80端口
CMD /bin/bash
② 构建
docker build -f DockerFile绝对路径 -t 新镜像名字:TGA .(点表示当前路径)
③ 运行
docker run -it 新镜像名字:TGA
④ 列出镜像的变更历史
docker history 镜像名/镜像ID