Dockerfile 常用命令
基础命令
| Dockerfile 指令 | 功能 |
|---|---|
| FROM | 指定基础镜像 |
| RUN | 在镜像构建过程中执行命令 |
| COPY | 将文件或目录从构建环境复制到镜像中 |
| ADD | 类似于 COPY,但更强大,支持 URL 和解压缩操作 |
| WORKDIR | 设置工作目录 ENV 设置环境变量 |
| ARG | 定义构建时的参数 |
| EXPOSE | 声明容器运行时要监听的端口 |
| VOLUME | 创建挂载点,用于持久化数据 |
| CMD | 指定容器启动时要运行的默认命令 |
| ENTRYPOINT | 配置容器启动时执行的命令 |
| LABEL | 添加元数据,用于标记镜像 |
| USER | 设置容器中运行命令的用户 |
| SHELL | 配置 shell 类型 |
打包命令
docker build -t <image_name>:<tag> <path_to_dockerfile_directory>- 举例
docker build -t 你的镜像名称:你的标签名称 -f 你指定的dockerfile名字 .命令详解
FROM
FROM 指令初始化一个新的构建阶段,并为后续指令设置基础镜像。因此,一个有效的 Dockerfile 必须以 FROM 指令开头。镜像可以是任何有效的镜像。
FROM [--platform=<platform>] <image> [AS <name>]参数:
<platform>: 构建的 cpu 架构,如 Linux/amd 64,Linux/arm 64。<image>: 指定 base image 的名称。AS <name>: 指定构建步骤的名称。
LABEL 命令
- 为镜像添加元数据,元数据为键值对的形式。
LABEL <key>=<value> <key>=<value> <key>=<value> ...- 比如
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"COPY 命令
用于从 docker 主机复制新文件或者目录至创建的新镜像指定路径中。
COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
# 或
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]<src>是构建环境中要复制的文件或目录的路径<dest>是要将文件或目录复制到容器中的目标路径举例
创建一个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/目录中。
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=1WORKDIR
WORKDIR指令用于设置工作目录,即在容器中执行后续命令的默认目录。
WORKDIR <directory>其中 <directory> 是要设置为工作目录的路径。可以使用绝对路径或相对路径。如果指定的路径不存在,WORKDIR 指令将创建该目录。
FROM ubuntu:22.04 as demo1
LABEL author="xiaoming" version="1.0" desc="create ubuntu demo1"
# 指定工作目录
WORKDIR /data/srcADD
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 .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.gzCMD
CMD 是 Dockerfile 中的一条指令,用于设置容器启动时默认执行的命令。它定义了容器启动时执行的主要命令,但是可以被 Docker 命令行中的 docker run 中的参数覆盖。
CMD command param1 param2EXPOSE
EXPOSE 是 Dockerfile 中的一条指令,用于声明容器运行时要监听的端口。这个指令并不会实际打开端口或者创建端口映射,它只是告诉 Docker 容器内部运行的应用程序应该监听哪些端口。
EXPOSE <port> [<port>/<protocol>...]其中 <port> 是要暴露的端口号,<protocol> 是要使用的网络协议,通常是 tcp 或 udp。如果未指定协议,则默认为 tcp。
ENTRYPOINT
ENTRYPOINT 是 Dockerfile 中的一条指令,用于设置容器启动时要运行的命令。与 CMD 指令类似,ENTRYPOINT 指令定义了容器启动时执行的主要命令,但是它不能被 docker run 命令行中的参数覆盖。
ENTRYPOINT command param1 param2- 比如
ENTRYPOINT nginx -g 'daemon off;'VOLUME
用于创建一个挂载点,并将该挂载点中的数据持久化保存。
VOLUME ["<路径>","<路径>","<路径>"……]其中 <路径> 是要挂载的目录路径。该目录路径可以是绝对路径,也可以是相对于容器内文件系统的路径。
比如
VOLUME ["/var/log", "/var/db"]