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 ​

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

bash
CMD command param1 param2

EXPOSE ​

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

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

其中 <port> 是要暴露的端口号,<protocol> 是要使用的网络协议,通常是 tcp 或 udp。如果未指定协议,则默认为 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"]