1.DockerFile的文件构成:
FROM <image> 或者 FROM <image>:<tag>
指定容器启动时使用的镜像(必须为第一行)
MAINTAINER:用来指定作者信息
RUN:指定了镜像构建中运行的命令(环境构筑相关)
RUN <command>(shell脚本模式)
RUN ["executable", "parms" ...]
EXPORT:指定了暴露的端口(不会自动打开)
尽管在DockerFile里制定了暴露的端口号,但在容器运行时仍旧要手动指定容器的端口映射
CMD:指定了容器运行时运行的命令(可被容器启动时的指令覆盖)
CMD <command>
CMD ["executable", "parms" ...]
CMD ["parms" ...]:搭配ENTRYPOINT指令使用,提供默认参数
ENTERYPOINT:和CMD指令的区别在于不会被容器启动时的指令所覆盖
但是可以在容器启动时使用docker run --entrypoint以及后面连接的指令所覆盖
ENTRYPOINT ["executable", "parms", ...]
ENTRYPOINT <command>
ADD:将文件/目录添加到DockerFile构建的镜像中(包含了类似tar的解压功能)
ADD <src> <dest>(来源地址:构建目录中的相对地址,目标地址:镜像系统中的绝对地址)
ADD ["<src>", "<dest>"]
COPY:将文件/目录添加到DockerFile构建的镜像中(单纯复制文件推荐使用COPY)
COPY <src> <dest>(来源地址:构建目录中的相对地址,目标地址:镜像系统中的绝对地址)
COPY ["<src>", "<dest>"]
VOLUME:向创建的镜像添加数据卷
VOLUMN ["/data"]
WORKDIR:指定创建的镜像中的工作路径(ENTRYPOINT与CMD指令都会在此目录下执行)
WORKDIR /path/to/workdir(指定绝对路径)
ENV:向创建的镜像中添加环境变量
ENV <key> <value>
ENV <key> = <value>
USER:指定镜像会以什么样的用户运行(镜像在容器中运行起来的时候,容器内显示的用户)
USER nginx
ONBUILD:向镜像添加触发器(当一个镜像被用作其他镜像构建时的基础镜像时,触发器会被执行)
本次镜像构建过程中并不会执行触发器
ONBUILD [INSTRUCTION]
2.DockerFile内部的构建过程:
构建镜像的过程:
从基础镜像运行一个容器
当执行了一个对容器进行修改的指令后
执行类似docker commit的指令,提交一个新的镜像层(这也就是形成的中间层镜像)
再基于刚提交的镜像构建一个新容器
再执行下一条指令,直到所有指令执行完毕
注意:DockerFile构建过程中,会删除中间层容器,但不会删除中间层镜像,因而具有了调试的能力(DockerFile的错误)
构建缓存:
当通过DockerFile构建了一个镜像之后,再一次通过该DockerFile构建镜像的时候,可以提高效率。
不适用构建缓存(包含文件下载安装的指令):
docker build --no-catch
查看镜像的构建过程:
docker history IMAGE