@@ -11,7 +11,7 @@ keywords: docker,Dockerfile,命令,指令详解
11
11
12
12
## Dockerfile 指令详解
13
13
14
- ### 1、 FROM 指定基础镜像
14
+ ### 1 FROM 指定基础镜像
15
15
16
16
FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。
17
17
@@ -40,7 +40,7 @@ FROM <image>:<digest>
40
40
- tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像
41
41
42
42
43
- ### 2、 RUN 执行命令
43
+ ### 2 RUN 执行命令
44
44
45
45
在镜像的构建过程中执行特定的命令,并生成一个中间镜像。格式:
46
46
@@ -55,35 +55,36 @@ RUN ["executable", "param1", "param2"]
55
55
- 层级 RUN 指令和生成提交是符合 Docker 核心理念的做法。它允许像版本控制那样,在任意一个点,对 image 镜像进行定制化构建。
56
56
- RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定 ` --no-cache ` 参数,如:` docker build --no-cache ` 。
57
57
58
- ### 3、 COPY 复制文件
58
+ ### 3 COPY 复制文件
59
59
60
60
格式:
61
61
62
62
``` sh
63
- - COPY < 源路径> ... < 目标路径>
64
- - COPY [" <源路径1>" ,... " <目标路径>" ]
63
+ COPY < 源路径> ... < 目标路径>
64
+ COPY [" <源路径1>" ,... " <目标路径>" ]
65
65
```
66
66
67
- 和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。比如:
67
+ 和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的` <目标路径> ` 位置。比如:
68
68
69
69
``` sh
70
70
COPY package.json /usr/src/app/
71
71
```
72
72
73
- <源路径> 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则,如:
73
+ ` <源路径> ` 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则,如:
74
74
75
75
``` sh
76
76
COPY hom* /mydir/
77
77
COPY hom? .txt /mydir/
78
78
```
79
79
80
- <目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
80
+ ` <目标路径> ` 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
81
81
82
82
此外,还需要注意一点,使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
83
83
84
84
85
- ### 4、ADD 更高级的复制文件
86
- ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。比如 <源路径> 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。
85
+ ### 4 ADD 更高级的复制文件
86
+
87
+ ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。比如` <源路径> ` 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到` <目标路径> ` 去。
87
88
88
89
在构建镜像时,复制上下文中的文件到镜像内,格式:
89
90
@@ -96,7 +97,7 @@ ADD ["<源路径>",... "<目标路径>"]
96
97
如果 docker 发现文件内容被改变,则接下来的指令都不会再使用缓存。关于复制文件时需要处理的/,基本跟正常的 copy 一致
97
98
98
99
99
- ### 5、 ENV 设置环境变量
100
+ ### 5 ENV 设置环境变量
100
101
101
102
格式有两种:
102
103
@@ -125,7 +126,7 @@ EXPOSE <port> [<port>...]
125
126
126
127
EXPOSE 指令并不会让容器监听 host 的端口,如果需要,需要在 docker run 时使用 ` -p ` 、` -P ` 参数来发布容器端口到 host 的某个端口上。
127
128
128
- ### 7、 VOLUME 定义匿名卷
129
+ ### 7 VOLUME 定义匿名卷
129
130
130
131
VOLUME用于创建挂载点,即向基于所构建镜像创始的容器添加卷:
131
132
@@ -144,7 +145,7 @@ VOLUME ["/data"]
144
145
VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。
145
146
146
147
147
- ### 8、 WORKDIR 指定工作目录
148
+ ### 8 WORKDIR 指定工作目录
148
149
149
150
WORKDIR用于在容器内设置一个工作目录:
150
151
@@ -165,7 +166,7 @@ RUN pwd
165
166
在以上示例中,pwd 最终将会在 ` /a/b/c ` 目录中执行。在使用 docker run 运行容器时,可以通过` -w ` 参数覆盖构建时所设置的工作目录。
166
167
167
168
168
- ### 9、 USER 指定当前用户
169
+ ### 9 USER 指定当前用户
169
170
170
171
USER 用于指定运行镜像所使用的用户:
171
172
@@ -187,7 +188,7 @@ USER uid:group
187
188
使用USER指定用户后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都将使用该用户。镜像构建完成后,通过 docker run 运行容器时,可以通过 ` -u ` 参数来覆盖所指定的用户。
188
189
189
190
190
- ### 10、 CMD
191
+ ### 10 CMD
191
192
192
193
CMD用于指定在容器启动时所要执行的命令。CMD 有以下三种格式:
193
194
@@ -202,7 +203,7 @@ CMD command param1 param2
202
203
** 注意**
203
204
与 RUN 指令的区别:RUN 在构建的时候执行,并生成一个新的镜像,CMD 在容器运行的时候执行,在构建时不进行任何操作。
204
205
205
- ### 11、 ENTRYPOINT
206
+ ### 11 ENTRYPOINT
206
207
207
208
208
209
ENTRYPOINT 用于给容器配置一个可执行程序。也就是说,每次使用镜像创建容器时,通过 ENTRYPOINT 指定的程序都会被设置为默认程序。ENTRYPOINT 有以下两种形式:
@@ -250,7 +251,7 @@ docker run -i -t itbilu/test -g "daemon off;"
250
251
251
252
在运行容器时,我们使用了 ` -g "daemon off;" ` ,这个参数将会被传递给 ENTRYPOINT,最终在容器中执行的命令为 ` /usr/sbin/nginx -g "daemon off;" ` 。
252
253
253
- ### 12、 LABEL
254
+ ### 12 LABEL
254
255
255
256
LABEL用于为镜像添加元数据,元数以键值对的形式指定:
256
257
@@ -491,7 +492,7 @@ exit 0
491
492
- 使用构建缓存。如果不想使用缓存,可以在构建的时候使用参数` --no-cache=true` 来强制重新生成中间镜像。
492
493
493
494
494
- # # 参考:
495
+ # # 参考
495
496
496
497
[Dockerfile reference](https://docs.docker.com/engine/reference/builder/# usage)
497
498
[使用Dockerfile构建Docker镜像](https://www.jianshu.com/p/cbce69c7a52f)
0 commit comments