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