【docker】Dockerfile构建镜像常用指令:


一、常用命令:

Dockerfile是一个文本文件,包含了一条条的指令,在基于指定的镜像上,一条指令构建一层,最终构建出一个新的镜像。

关键字作用备注格式
FROM指定基础镜像指定基于哪个镜像开始构建FROM <image>:<tag>
MAINTAINER作者信息标明这个dockerfile是谁写的(已弃用)MAINTAINER xxx xxx
LABEL标签给镜像添加元数据,以键值对的形式,可以理解类似注释LABEL <key>=<value> <key>=<value> <key>=<value>
RUN制作镜像时执行的命令构建镜像时运行的指令,默认是/bin/shRUN <命令行命令>或RUN["可执行文件", "参数1", "参数2"...,"参数n"](相当于:RUN 可执行文件 参数1 参数2 … 参数n)
CMD容器启动时执行的命令运行容器时执行的shell环境。每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。有3种格式:【1】exec执行:CMD ["executable","param1","param2"];【2】/bin/sh中执行:CMD command param1 param2;【3】提供给 ENTRYPOINT 的默认参数:CMD ["param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用ENTRYPOINT ["executable", "param1", "param2"]
COPY复制文件到镜像中构建的时候复制文件到镜像中COPY 源路径 目标路径(源路径是宿主机的路径,目标路径是容器的路径)
ADD添加文件构建时添加文件到镜像中,与COPY的区别是ADD会自动解压ADD 源路径 目标路径(源路径是宿主机的路径,目标路径是容器的路径)
ENV环境变量在构建镜像时,设置环境变量,可以在启动容器的时候,通过-e覆盖(即容器内也可以使用)ENV <key> <value>
ARG构建参数用于指定传递给构建运行时的变量(给dockerfile传参),相当于构建镜像时可以在外部为里面传参ARG <name>[=<default value>]
VOLUME定义外部可以挂载的匿名数据卷在启动容器时若忘记挂载数据卷,会自动挂载到匿名卷VOLUME ["/xxx/xx/xxxx", "xxx", ..., "xxx"]
EXPOSE声明容器的服务端口仅仅声明容器的服务端口(及提供服务的端口)EXPOSE 端口号
WORKDIR工作目录指定容器的开始工作目录(若没有时会自动创建)。设置之后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行 WORKDIR最好是绝对路径
USER指定容器执行用户指定运行容器时的用户名或ID执行用户USER user
二、注意事项:
  1. Dockerfile本质是一个文件,通过指令描述镜像的构建过程。
  2. Dockerfile的注释符号是#。
  3. Dockerfile的第一行必须是FROM,从一个基础镜像来构建。
  4. 通过Dockerfile构建镜像命令格式为:docker build -f Dockerfile文件路径 -t 镜像名称:版本 .
  1. 默认一般把文件命名为Dockerfile,然后构建命令直接用docker build -t 要保存的镜像名称:版本 .
  2. 最后的.的含义是将当前目录告诉docker引擎,然后当执行docker build命令后,本机将当前目录下的所有文件发送给docker引擎,最后由docker引擎完成镜像的构建
三、add和copy的区别:

Dockerfile 中的 ADD 与 COPY 指令都可以用于将本地文件或目录复制到 Docker 镜像中,但它们之间有一些区别。

【1】ADD 指令支持自动解压缩功能

当使用 ADD 指令将本地文件复制到 Docker 镜像中时,如果该文件是压缩包格式,Docker 会自动解压缩该文件。例如:

ADD nginx-1.21.0.tar.gz /usr/local/

上述例子中在将本地的 nginx-1.21.0.tar.gz 文件复制到 Docker 镜像的 /usr/local/ 目录下时,Docker 会将该文件解压缩。
而 COPY 指令并不支持自动解压缩功能,需要手动解压缩后再复制进镜像。

【2】ADD 指令可以从 URL 复制内容

ADD 指令除了能够复制本地文件和目录外,还可以复制远程文件(例如从 URL 下载)到 Docker 镜像中。例如:

ADD https://example.com/nginx-1.21.0.tar.gz /usr/local/

上述例子中会从远程 URL https://example.com/nginx-1.21.0.tar.gz 下载文件,并将其复制到 Docker 镜像的 /usr/local/ 目录下。
而 COPY 指令只能复制本地文件和目录。

【3】 ADD 指令具有隐式的文件拷贝功能

ADD 指令除了能够复制本地文件和目录外,还具有一个隐式的文件拷贝功能:当复制一个压缩包文件到容器中时,Docker 会自动解压,并且可以直接从 URL 下载文件并解压缩。例如:

ADD package.tar.gz /app/

上述例子中,如果 package.tar.gz 是一个压缩包文件,则 Docker 会自动解压缩该文件,并将其复制到 /app/ 目录下。而 COPY 指令无法实现这一功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sun Peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值