1. 前言
Dockerfile
是用来构建自定义
Docker
镜像的文本文档。我们通过
docker build
命令用于从
Dockerfile
文件构建镜像。 如果你要构建自定义镜像,
Dockerfile
是你必须学会的技能之一。
2. Dockerfile 的基本结构
Dockerfile
一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令,
#
为
Dockerfile
中的注释。
3. Dockerfile 文件说明
Docker
从上到下的顺序运行
Dockerfile
的指令,每一个指令都以
step
为步骤。而且文件的命名也必须为
Dockerfile
。
4. Dockerfile 常用的指令。
接下来对常用的 Dockerfile 指令进行总结。
4.1 FROM 指令
FROM
是指定基础镜像,必须为第一个命令,格式:
FROM
:
其中
tag
或
digest
是可选的,如果不使用这两个值时,会使用
latest
版本的基础镜像。
示例:
FROM mysql:5.6
4.2 MAINTAINER 指令
MAINTAINER
用来声明维护者信息,
该命令已经过期
,推荐使用
LABEL
,格式:
MAINTAINER
4.3 LABEL 指令
LABEL:用于为镜像添加元数据,多用于声明构建信息,作者、机构、组织等。格式:
LABEL
示例:
LABEL version="1.0" description="felord.cn" by="Felordcn"
使用
LABEL
指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
4.4 ENV 指令
ENV
用来设置环境变量,格式:
ENV
#
ENV
#可以设置多个变量,每个变量为一个"
示例:
ENV version 1.0.0
或者
ENV version=1.0.0
可以通过
${key}
在其它指令中来引用变量,如
${version}
。我们也可以通过
docker run
中的
-e
来动态赋值
4.5 ARG 指令
ARG
用于指定传递给构建运行时的变量,格式:
ARG
通过
docker run
中的
--build-arg
来动态赋值,不指定将使用其默认值。
4.6 WORKDIR 指令
WORKDIR
用来指定工作目录,类似于我们通常使用的
cd
命令,格式:
WORKDIR
通过
WORKDIR
设置工作目录,
Dockerfile
中的其它指令
RUN
、
CMD
、
ENTRYPOINT
、
ADD
、
COPY
等命令都会在该目录下执行。在使用
docker run
运行容器时,可以通过
-w
参数覆盖构建时所设置的工作目录。
4.7 ADD 指令
ADD
用于将本地文件添加到镜像中,
tar
类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似
wget
,格式:
ADD <src>... <dest>
# 用于支持包含空格的路径
ADD ["<src>",... "<dest>"] 复制代码
示例:
ADD home /path/ # 支持通配符 添加所有以"home"开头的文件 到/path/ 下
4.8 COPY 指令
COPY
的功能类似于
ADD
,但是不会自动解压文件,也不能访问网络资源
4.9 RUN 指令
RUN
用来执行构建镜像时执行的命令,有以下两种命令执行方式: