Dockerfile制作镜像的常用指令详解,


目录
  • 1.Dockerfile 指令清单
  • 2. FROM 指令
  • 3. LABEL 指令
  • 4. COPY 指令
  • 5. ENV 指令
  • 6.WORKDIR
  • 7. ADD
  • 8.RUN
  • 9. CMD
  • 10. EXPOSE
  • 11. ENTRYPOINT
  • 12. VOLUME

1.Dockerfile 指令清单

更多更详细指令:官网 Dockerfile reference | Docker Docs

Dockerfile 指令功能
FROM指定基础镜像
RUN在镜像构建过程中执行命令
COPY将文件或目录从构建环境复制到镜像中
ADD类似于 COPY,但更强大,支持 URL 和解压缩操作
WORKDIR设置工作目录
ENV设置环境变量
ARG定义构建时的参数
EXPOSE声明容器运行时要监听的端口
VOLUME创建挂载点,用于持久化数据
CMD指定容器启动时要运行的默认命令
ENTRYPOINT配置容器启动时执行的命令
LABEL添加元数据,用于标记镜像
USER设置容器中运行命令的用户
SHELL配置 shell 类型

在包含 Dockerfile 文件的目录中执行以下命令:

docker build -t <image_name>:<tag>  <path_to_dockerfile_directory>
  • -t <image_name>:<tag> 用于指定构建的镜像名称及标签。
  • <path_to_dockerfile_directory> 是 Dockerfile 所在的目录路径。

2. FROM 指令

FROM 指令初始化一个新的构建阶段,并为后续指令设置基础镜像。因此,一个有效的 Dockerfile 必须以 FROM 指令开头。镜像可以是任何有效的镜像。

FROM [--platform=<platform>] <image> [AS <name>]
  • 参数
    • <platform>: 构建的 cpu 架构,如 Linux/amd 64,Linux/arm 64。
    • <image>: 指定 base image 的名称。
    • AS <name>: 指定构建步骤的名称。

3. LABEL 指令

  • 为镜像添加元数据,元数据为键值对的形式。
LABEL <key>=<value> <key>=<value> <key>=<value> ...

比如

LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"

4. COPY 指令

  • 用于从 docker 主机复制新文件或者目录至创建的新镜像指定路径中。
COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
# 或
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
  • <src> 是构建环境中要复制的文件或目录的路径。
  • <dest> 是要将文件或目录复制到容器中的目标路径。

除了基本的格式之外,COPY 指令还支持一些参数来指定复制行为:

  • -chown=<user>:<group>:设置文件的所有者和组。例如 -chown=root:root
  • --from=<source_stage>:从之前的构建阶段(指定的构建阶段或者镜像)复制文件。这个参数可以让你从一个镜像或者构建阶段中复制文件到当前的镜像。这对于多阶段构建非常有用。
  • 案例:

创建一个 Dockerfile 文件,内容如下。

FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
COPY ./index.html /data/web/html/ 
  • 使用 FROM ubuntu:22.04 as demo1 指令,表示初始化一个新的构建阶段,并以 ubuntu:22.04 镜像作为基础镜像,并将该阶段命名为 demo1
  • 使用 LABEL 指令,添加元数据信息。author="xiaoming" 表示作者为 "xiaoming";version="1.0" 表示版本为 "1.0";desc="create ubuntu demo1" 表示描述为 "create ubuntu demo 1"。
  • 将主机中的当前目录下的 index.html 文件拷贝到容器的 /data/web/html/ 目录中。

5. ENV 指令

ENV <key1>=<value1> <key2>=<value2> ...

其中 <key> 是环境变量的名称,<value> 是环境变量的值。这种格式用于设置单个环境变量,也可以使用通配符。

FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
ENV MYROOTDIR=/data/web/html/
# 使用通配符引用 MYROOTDIR
COPY ./index.html ${MYROOTDIR} 
ENV MYTEST=1

6.WORKDIR

WORKDIR 指令用于设置工作目录,即在容器中执行后续命令的默认目录。

WORKDIR <directory>

其中 <directory> 是要设置为工作目录的路径。可以使用绝对路径或相对路径。如果指定的路径不存在,WORKDIR 指令将创建该目录。

FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
# 指定工作目录
WORKDIR /data/src

构建这个镜像,并启动。

WORKDIR 指令的作用是设置容器中执行后续命令的默认工作目录。它影响接下来所有命令执行的上下文环境,使得在Docker 容器中执行命令时不必每次都指定完整的路径。

7. ADD

ADD 指令用于将本地文件、目录、或远程文件 URL 添加到镜像中。它类似于 COPY 指令,但具有更多的功能,比如会它可以解压和下载。

ADD <source> <destination>

其中 <source> 是要添加到镜像中的文件、目录或 URL,而 <destination> 是文件系统中的目标路径。

FROM ubuntu:22.04 as demo1

LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"

WORKDIR /data/src

# 将nginx的源代码下载到当前目录(/data/src)

ADD https://nginx.org/download/nginx-1.24.0.tar.gz .

也可以再进行解压(过程就不展示了)。

FROM ubuntu:22.04 as demo1

LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"

WORKDIR /data/src

# 将nginx的源代码下载到当前目录(/data/src)

ADD https://nginx.org/download/nginx-1.24.0.tar.gz .

# 解压到当前目录(/data/src)

ADD ./nginx-1.24.0.tar.gz .

8.RUN

RUN 指令用于在镜像构建过程中执行命令。它可以执行任何有效的 shell 命令、可执行文件或脚本。其基本格式为:

RUN <command> && <command> ……

其中 <command> 是要执行的命令。在 Dockerfile 中可以是任何合法的 shell 命令,例如安装软件包、运行脚本、创建目录等。

FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
WORKDIR /data/src
# 将nginx的源代码下载到当前目录(/data/src)
ADD https://nginx.org/download/nginx-1.24.0.tar.gz .
# 执行 cd 与 tar 命令
RUN cd /data/src && tar zxvf nginx-1.24.0.tar.gz

9. CMD

CMD 是 Dockerfile 中的一条指令,用于设置容器启动时默认执行的命令。它定义了容器启动时执行的主要命令,但是可以被 Docker 命令行中的 docker run 中的参数覆盖。

CMD command param1 param2

10. EXPOSE

EXPOSE 是 Dockerfile 中的一条指令,用于声明容器运行时要监听的端口。这个指令并不会实际打开端口或者创建端口映射,它只是告诉 Docker 容器内部运行的应用程序应该监听哪些端口。

EXPOSE <port> [<port>/<protocol>...]

其中 <port> 是要暴露的端口号,<protocol> 是要使用的网络协议,通常是 tcpudp。如果未指定协议,则默认为 tcp

11. ENTRYPOINT

ENTRYPOINT 是 Dockerfile 中的一条指令,用于配置容器启动时执行的命令。与 CMD 不同,ENTRYPOINT 指令设置的命令不会被 Docker 命令行中的 docker run 中的命令覆盖,而是会作为容器的主要命令执行。

ENTRYPOINT ["executable", "param1", "param2"]

比如:

ENTRYPOINT nginx -g 'daemon off;'

12. VOLUME

用于创建一个挂载点,并将该挂载点中的数据持久化保存。

VOLUME ["<路径>","<路径>","<路径>"……]

其中 <路径> 是要挂载的目录路径。该目录路径可以是绝对路径,也可以是相对于容器内文件系统的路径。

比如:

VOLUME ["/var/log", "/var/db"]

到此这篇关于Dockerfile制作镜像的常用指令详解的文章就介绍到这了,更多相关Dockerfile制作镜像指令内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

您可能感兴趣的文章:
  • Docker中Dockerfile制作镜像的方法步骤
  • dockerfile制作apache镜像的方法
  • Docker 制作镜像Dockerfile和commit操作
  • docker Dockerfile文件制作自己的镜像的方法
  • 利用Dockerfile制作java运行环境的镜像的方法步骤

相关内容