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

文章目录

        • 一、常用命令:
        • 二、注意事项:
        • 三、add和copy的区别:
            • [【1】ADD 指令支持自动解压缩功能](#【1】ADD 指令支持自动解压缩功能)
            • [【2】ADD 指令可以从 URL 复制内容](#【2】ADD 指令可以从 URL 复制内容)
            • [【3】 ADD 指令具有隐式的文件拷贝功能](#【3】 ADD 指令具有隐式的文件拷贝功能)

一、常用命令:

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

关键字 作用 备注 格式
FROM 指定基础镜像 指定基于哪个镜像开始构建 FROM <image>:<tag>
MAINTAINER 作者信息 标明这个dockerfile是谁写的(已弃用) MAINTAINER xxx xxx
LABEL 标签 给镜像添加元数据,以键值对的形式,可以理解类似注释 LABEL <key>=<value> <key>=<value> <key>=<value>
RUN 制作镜像时执行的命令 构建镜像时运行的指令,默认是/bin/sh RUN <命令行命令>或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 镜像名称:版本 .
  5. 默认一般把文件命名为Dockerfile,然后构建命令直接用docker build -t 要保存的镜像名称:版本 .
  6. 最后的.的含义是将当前目录告诉docker引擎,然后当执行docker build命令后,本机将当前目录下的所有文件发送给docker引擎,最后由docker引擎完成镜像的构建

三、add和copy的区别:

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

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

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

bash 复制代码
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 镜像中。例如:

bash 复制代码
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 下载文件并解压缩。例如:

bash 复制代码
ADD package.tar.gz /app/

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

相关推荐
XIAOHEZIcode16 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化