Docker 镜像可以通过在容器中进行命令操作创建,但更好的方式是通过 DockerFile 进行 Build。这样把 DockerFile 用放到 GitHub,版本控制、易于分享、可以实现自动化 Build。
下面就列出一些常用 DockerFile 命令
FROM
设定此次编译的目标镜像的基础镜像
FROM [--platform=<platform>] <image> [AS <name>]
-
FROM alpine:3.8
以alpine:3.8
为当前基础镜像进行操作 -
FROM aaa as bbb
这里的 bbb 是某个中间镜像,之后可以被 copy 调用把中间生成文件拷走 -
--platform=arch
可以指定架构类型,如linux/arm64
- 如果不指定这个参数,会以当前执行 Dockerfile 的主机的架构作为默认架构
MAINTAINER
指明镜像制作者的名称及电子邮件,以便之后的使用者联系。
1 |
|
RUN
执行一些命令,用\
换行
1 |
|
ENV
设置环境变量,在后续命令中就可以使用这个环境变量了。
ENV <key> <value>
- 示例:
ENV PATH="${PATH}:/opt/gtk/bin"
COPY
将 DockerFile 所在目录下的文件复制到容器中,会在容器中自动创建相应文件夹
ADD
ADD 和 COPY 功能基本相同,COPY 相比更简易常用。
- ADD 独有的两个功能:
- 解压压缩文件并把它们添加到镜像中
- 从 url 拷贝文件到镜像中
EXPOSE
指定容器向外暴露的端口号
1 |
|
WORKDIR
指定 Build 过程中在容器中执行命令时的工作目录
1 |
|
上面的命令最终创建了文件/home/user1/file1.txt
ONBUILD
目标镜像被其他人做基础镜像进行编译时执行的命令
USER
指定镜像运行时的用户
1 |
|
VOLUME
指定主机目录或文件映射到容器的目录或文件
1 |
|
CMD
指定容器启动时要执行的命令。可以被 docker run 命令的参数覆盖。
ENTRYPOINT
和 CMD 类似,指定容器启动时要执行的命令。如果 docker run 也有命令,会被放在 ENTRYPOINT 后面。
- 在
docker run
命令中可以通过--entrypoint xxx
覆盖ENTRYPOINT
。
ARG
在 docker build 时可以通过--build-arg <参数名>=<值>
来覆盖。
-
ARG <参数名>[=<默认值>]
-
在执行
FROM xx
之后会让之前的ARG
失效,所以一定要在执行一次参数导入
LABEL
为镜像添加一些元数据
LABEL <key>=<value> <key>=<value> <key>=<value> ...