一、环境介绍
1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录
2.Dockerfile中相对路径默认都是Dockerfile所在的目录
3.Dockerfile中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性。Dockerfile中每一条指令被视为一层
4.Dockerfile中指明大写(约定俗成)
二、指令介绍
FROM功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同时意味着接下来所写的指令将作为镜像的第一层开始
语法: - FROM <image>
- FROM <image>:<tag>
- FROM <image>:<digest>
- 三种写法,其中<tag>和<digest> 是可选项,如果没有选择,那么默认值为latest
复制代码 MAINTAINER指定作者 语法: LABEL功能是为镜像指定标签 语法: - LABEL <key>=<value> <key>=<value> <key>=<value> ...
- 一个Dockerfile种可以有多个LABEL,如下:
- LABEL "com.example.vendor"="ACME Incorporated"
- LABEL com.example.label-with-value="foo"
- LABEL version="1.0"
- LABEL description="This text illustrates \
- that label-values can span multiple lines."
- 但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号
- 如下:
- LABEL multi.label1="value1" \
- multi.label2="value2" \
- other="value3"
-
复制代码说明:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖
ADD一个复制命令,把文件复制到镜像中。
如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。
语法如下: - 1. ADD <src>... <dest>
- 2. ADD ["<src>",... "<dest>"]
复制代码路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径,推荐写成绝对路径 可以是一个本地文件或者是一个本地压缩文件,还可以是一个url 如果把写成一个url,那么ADD就类似于wget命令
示例
- ADD test relativeDir/
- ADD test /relativeDir
- ADD http://example.com/foobar /
复制代码注意事项 - src为一个目录的时候,会自动把目录下的文件复制过去,目录本身不会复制
- 如果src为多个文件,dest一定要是一个目录
COPY
看这个名字就知道,又是一个复制命令 语法如下: - COPY <src>... <dest>
- COPY ["<src>",... "<dest>"]
复制代码与ADD的区别 EXPOSE功能为暴漏容器运行时的监听端口给外部 但是EXPOSE并不会使容器访问主机的端口 如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数
语法: ENV功能为设置环境变量 语法有两种 - ENV <key> <value>
- ENV <key>=<value> ...
复制代码两者的区别就是第一种是一次设置一个,第二种是一次设置多个 在Dockerfile中使用变量的方式 - <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow: auto hidden;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif"><span style="font-size: 16px; font-variant-ligatures: no-common-ligatures;">$varname</span></font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow: auto hidden;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif"><span style="font-size: 16px; font-variant-ligatures: no-common-ligatures;">${varname}</span></font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow: auto hidden;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif"><span style="font-size: 16px; font-variant-ligatures: no-common-ligatures;">${varname:-default value}</span></font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; line-height: 26px; overflow: auto hidden;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif"><span style="font-size: 16px; font-variant-ligatures: no-common-ligatures;">$(varname:+default value}</span></font></p>
复制代码第一种和第二种相同 第三种表示当变量不存在使用-号后面的值 第四种表示当变量存在时使用+号后面的值(当然不存在也是使用后面的值)
|