Skip to content

Dockerfile

Dockerfile 是一种文本文件,用于描述 Docker 镜像的构建过程。使用 Dockerfile,你可以定义所需的操作系统、安装软件包、配置环境变量、添加文件等操作。通过在 Dockerfile 中指定命令和参数,Docker 可以自动地执行这些操作并生成一个新的镜像。

Dockerfile 指令

基础指令

  • FROM: 指定基础镜像。

    dockerfile
    FROM ubuntu:20.04
  • ARG: 定义构建时的变量。

    dockerfile
    ARG VERSION=1.0
  • ENV: 设置容器运行时的环境变量。

    dockerfile
    ENV APP_HOME /app

文件操作

  • COPY: 复制本地文件或目录到容器内。

    dockerfile
    COPY ./src /app/src
  • ADD: 复制文件或目录到容器内,支持自动解压和远程文件下载。

    dockerfile
    ADD https://example.com/file.tar.gz /app

构建指令

  • WORKDIR: 设置工作目录,若目录不存在则自动创建。

    dockerfile
    WORKDIR /app
  • RUN: 在容器中执行命令,多个命令可用 && \ 连接。

    dockerfile
    RUN apt-get update && apt-get install -y curl

    注意:尽量合并 RUN 指令,减少镜像层数。

运行时指令

  • CMD: 指定容器启动时默认执行的命令,可被 docker run 覆盖。

    dockerfile
    CMD ["echo", "Hello, World!"]
  • ENTRYPOINT: 指定容器启动时默认执行的命令,不可被覆盖。

    dockerfile
    ENTRYPOINT ["echo", "Hello, World!"]
  • EXPOSE: 声明容器提供的端口号。

    dockerfile
    EXPOSE 8080
  • VOLUME: 定义容器挂载的卷。

    dockerfile
    VOLUME /data

CMDENTRYPOINT 同时支持 shell 格式和 Exec 格式

bash
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
bash
CMD ["echo", "hello docker"]
ENTRYPOINT ["echo", "hello docker"]

推荐使用 Exec 格式(或者说 JSON 数组格式)的 CMDENTRYPOINT,避免 shell 解析问题。

参考资料

基于 MIT 许可发布