先搞懂: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 可根据需求,多次批量执行(如定期更新配置、批量重启服务)。