Dockerfile是什么
Dockerfile是一个文本文件,用于构建镜像
文本内容是构建镜像的的指令和说明
Docker镜像构建
-
编写dockerfile文件
FROM 和 RUN
FROM:指定源镜像
RUN:设置在镜像中要执行的命令RUN <命令行命令>
or RUN [“可执行文件”, “参数1”, “参数2”]dockerfile的指令每一次执行都会构建新的层
过多的层会导致镜像变大
多条RUN指令可以通过\ 回车 &&
链接为一条指令执行 -
在dockerfile所在目录执行
docker build -t 镜像名称:镜像标签 .
指令最后一个 . 是上下文路径
- 上下文路径是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包
- 上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
指令详解
COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径
ADD:和COPY类似,目标文件如果是tar压缩文件,会自动复制并解压,缺点:如果不解压,会导致镜像构建缓存失效,构建速度变慢。
CMD:启动容器时生效,为启动的容器指定默认要运行的程序
- 程序运行结束,容器也就结束
- CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
- 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
ENTRYPOINT:类似CMD
不会被docker run指定的命令行参数替代,命令行参数给该指令做参数
运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
CMD指定的参数是可选参数,外部没有传递参数时才有用
ENV:指定环境变量
ARG:仅仅在docker build过程中有用
构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖
VOLUME:定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
避免重要的数据,因容器重启而丢失,这是非常致命的。
避免容器不断变大。
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
EXPOSE:声明端口
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户
用户和用户组必须提前已经存在
HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD:用于延迟构建命令的执行。
LABEL:LABEL 指令用来给镜像添加一些元数据(metadata)