Dockerfile简介
Dockerfile其实就是我们用来构建Docker镜像的源码,当然这不是所谓的编程源码,而是一些命令的组合,只要理解它的逻辑和语法格式,就可以编写Dockerfile了。
简单点说,Dockerfile的作用:它可以让用户个性化定制Docker镜像。因为工作环境中的需求各式各样,网络上的镜像很难满足实际的需求。
Dockerfile常见命令
命令 | 作用 |
---|---|
FROM image_name:tag | |
MAINTAINER user_name | 声明镜像作者 |
ENV key value | 设置环境变量(可以写多条) |
RUN command | 编译镜像时运行的脚本(可以写多条) |
CMD | 设置容器的启动命令 |
ENTRYPOINT | 设置容器的入口程序 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD类似,但是如果有压缩文件不能解压 |
WORKDIR path_dir | 设置工作目录 |
ARG | 设置编译镜像时加入的参数 |
VOLUMN | 设置容器的挂载卷 |
镜像构建示意图:
可以看到,新镜像是从基础镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
- RUN、CMD、ENTRYPOINT的区别?
RUN:用于指定 docker build 过程中要运行的命令,即是创建 Docker 镜像(image)的步骤
CMD:设置容器的启动命令,Dockerfile中只能有一条CMD命令,如果写了多条则最后一条生效,CMD不支持接收 docker run 的参数。
ENTRYPOINT:入口程序是容器启动时执行的程序,docker run 中最后的命令将作为参数传递给入口程序,ENTRYPOINT 类似于 CMD 指令,但可以接收 docker run 的参数。