Dockerfile详解超全(一)
一、环境介绍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指定作者语法:MAINTAINER <name>
新版docker中使用LABEL指明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的区别
[*]COPY的只能是本地文件,其他用法一致
EXPOSE功能为暴漏容器运行时的监听端口给外部但是EXPOSE并不会使容器访问主机的端口如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数
语法:EXPOSE <port>/<tcp/udp>
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>第一种和第二种相同第三种表示当变量不存在使用-号后面的值第四种表示当变量存在时使用+号后面的值(当然不存在也是使用后面的值)
出租一楼 snow 发表于 2023-2-21 11:33
出租一楼
感谢支持,虽然有点水;P 虽然看不懂,但是感觉好厉害的样子 看不懂,很厉害的样子
{:4_89:} 水水更健康
页:
[1]