Skip to content

Dockerfile 常用命令

基础命令

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

打包命令

bash
docker build -t <image_name>:<tag>  <path_to_dockerfile_directory>
  • 举例
bash
docker build -t 你的镜像名称:你的标签名称 -f 你指定的dockerfile名字 .

命令详解

FROM

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

bash

FROM [--platform=<platform>] <image> [AS <name>]

参数:

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

LABEL 命令

  • 为镜像添加元数据,元数据为键值对的形式。
bash

LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 比如
bash

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

COPY 命令

用于从 docker 主机复制新文件或者目录至创建的新镜像指定路径中。

bash

COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
# 或
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
  • <src>是构建环境中要复制的文件或目录的路径

  • <dest>是要将文件或目录复制到容器中的目标路径

  • 举例

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

bash

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/ 目录中。

ENV 指令

bash
ENV <key1>=<value1> <key2>=<value2> ...
  • 其中 <key> 是环境变量的名称,<value> 是环境变量的值。这种格式用于设置单个环境变量,也可以使用通配符。
bash

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

WORKDIR

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

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

bash

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

ADD

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

bash
ADD <source> <destination>

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

bash

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 .
  • 也可以在解压
bash

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 .

RUN

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

bash
RUN <command> && <command> ……

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

bash

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

CMD

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

bash
CMD command param1 param2

EXPOSE

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

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

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

ENTRYPOINT

ENTRYPOINT 是 Dockerfile 中的一条指令,用于设置容器启动时要运行的命令。与 CMD 指令类似,ENTRYPOINT 指令定义了容器启动时执行的主要命令,但是它不能被 docker run 命令行中的参数覆盖。

bash
ENTRYPOINT command param1 param2
  • 比如
bash
ENTRYPOINT nginx -g 'daemon off;'

VOLUME

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

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

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

比如

bash

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