DockerFile是什么?

2 阅读2分钟

先搞懂:DockerFile 是什么?

DockerFile是一个文本文件,包含一系列指令,用于构建Docker镜像。它的核心作用是“定义镜像的构建流程”,通过逐行执行指令,将应用依赖、环境配置、启动命令等固化到镜像中,实现镜像的可复用、可追溯,避免“我本地能跑,线上跑不起来”的问题。

DockerFile 核心指令(极简解读)

  • FROM:指定基础镜像
    • 用法:FROM ubuntu:22.04
  • RUN:构建时执行命令
    • 用法:RUN apt update && apt install -y nginx
  • COPY:本地复制到镜像
    • 用法:COPY ./app /usr/local/app
  • CMD:容器启动命令(可覆盖)
    • 用法:CMD ["nginx", "-g", "daemon off;"]
  • ADD:复制+解压(ZIP不可用)
    • 用法:ADD ./package.tar.gz /usr/local/
  • MAINTAINER:维护者信息(目前官方似乎弃用,因为查找数据不便)
    • 用法:MAINTAINER test@163.com
  • LABEL:添加镜像元数据
    • 用法:LABEL author="test" version="1.0"
  • EXPOSE:声明监听端口
    • 用法:EXPOSE 80 443
  • VOLUME:定义数据卷
    • 用法:VOLUME ["/data"]
  • ENV:设置全局环境变量
    • 用法:ENV JAVA_HOME /usr/local/jdk
  • ARG:构建时临时变量
    • 用法:ARG BUILD_VERSION=1.0
  • ENTRYPOINT:容器入口命令(难覆盖)
    • 用法:ENTRYPOINT ["java", "-jar"]
  • USER:指定运行用户
    • 用法:USER nginx
  • HEALTHCHECK:配置健康检查
    • 用法:HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1
  • ONBUILD:基础镜像触发指令
    • 用法:ONBUILD COPY ./app /usr/local/app

对比:DockerFile与Playbook的异同

1. 相似之处

  • 都是配置文件,通过“代码化”定义操作流程,实现可复用、可追溯。
  • 都用于简化操作,减少手动干预,避免人为失误(DockerFile简化镜像构建,Playbook简化运维操作)。

2. 核心差别

  • 核心用途不同:DockerFile 负责构建镜像,聚焦“环境打包”;Playbook 负责执行运维任务,聚焦“批量操作”。
  • 适用工具不同:DockerFile 是 Docker 的配置文件,仅用于 Docker 镜像构建;Playbook 是 Ansible 的配置文件,仅用于 Ansible 自动化运维。
  • 操作对象不同:DockerFile 操作的是“镜像”,最终输出可运行的容器镜像;Playbook 操作的是“服务器”(物理机、虚拟机、容器),最终完成服务器的配置、部署等操作。
  • 执行时机不同:DockerFile 仅在镜像构建时执行一次,后续使用该镜像启动容器,无需再执行;Playbook 可根据需求,多次批量执行(如定期更新配置、批量重启服务)。