Dockerfile制作镜像的常用指令详解
作者:会飞的喵喵
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>
是要使用的网络协议,通常是 tcp
或 udp
。如果未指定协议,则默认为 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制作镜像指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!