主题
Dockerfile
Dockerfile 是一种文本文件,用于描述 Docker 镜像的构建过程。使用 Dockerfile,你可以定义所需的操作系统、安装软件包、配置环境变量、添加文件等操作。通过在 Dockerfile 中指定命令和参数,Docker 可以自动地执行这些操作并生成一个新的镜像。
Dockerfile 指令
基础指令
FROM: 指定基础镜像。
dockerfileFROM ubuntu:20.04
ARG: 定义构建时的变量。
dockerfileARG VERSION=1.0
ENV: 设置容器运行时的环境变量。
dockerfileENV APP_HOME /app
文件操作
COPY: 复制本地文件或目录到容器内。
dockerfileCOPY ./src /app/src
ADD: 复制文件或目录到容器内,支持自动解压和远程文件下载。
dockerfileADD https://example.com/file.tar.gz /app
构建指令
WORKDIR: 设置工作目录,若目录不存在则自动创建。
dockerfileWORKDIR /app
RUN: 在容器中执行命令,多个命令可用
&& \
连接。dockerfileRUN apt-get update && apt-get install -y curl
注意:尽量合并
RUN
指令,减少镜像层数。
运行时指令
CMD: 指定容器启动时默认执行的命令,可被
docker run
覆盖。dockerfileCMD ["echo", "Hello, World!"]
ENTRYPOINT: 指定容器启动时默认执行的命令,不可被覆盖。
dockerfileENTRYPOINT ["echo", "Hello, World!"]
EXPOSE: 声明容器提供的端口号。
dockerfileEXPOSE 8080
VOLUME: 定义容器挂载的卷。
dockerfileVOLUME /data
CMD
和 ENTRYPOINT
同时支持 shell
格式和 Exec
格式
bash
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
bash
CMD ["echo", "hello docker"]
ENTRYPOINT ["echo", "hello docker"]
推荐使用 Exec
格式(或者说 JSON
数组格式)的 CMD
和 ENTRYPOINT
,避免 shell 解析问题。