第 19 章:Dockerfile、Compose、健康检查与最小安全
建议学时:3 小时|状态:配套文件已生成并完成静态检查
学习目标
- 读懂并构建简单 Dockerfile;
- 用 Compose 管理服务;
- 使用健康检查和最小权限思维验收结果。
概念图
概念图 / 文本
源文件 + Dockerfile + 构建上下文 → Image → Compose → Container → Health/HTTPDockerfile
综合项目使用:
项目文件 · Dockerfile
FROM nginx:alpine
COPY site/ /usr/share/nginx/html/
HEALTHCHECK --interval=10s --timeout=3s --retries=3 \
CMD wget -qO- http://127.0.0.1/ >/dev/null || exit 1FROM 选择基础镜像;COPY 把受版本控制的页面复制进镜像;健康检查从容器内部验证 HTTP。生产环境应进一步固定已审核版本或 digest,并建立更新策略;教学项目保留易读标签。
Compose
项目文件 · YAML
services:
web:
build:
context: .
ports:
- "8080:80"
restart: "no"在 Ubuntu Bash:
Ubuntu Bash
docker compose config
docker compose build
docker compose up -d
docker compose ps
docker compose logs --tail 100
curl --fail http://localhost:8080/
docker compose downconfig 先解析配置,但不证明构建或运行成功。up -d 返回也不证明健康;需要结合 ps、HTTP 和页面内容。
构建上下文
Docker 会把构建上下文中的可见文件发送给构建器。.dockerignore 应排除 .git、日志、临时文件和秘密文件。不要把凭据写进 Dockerfile、Compose 或镜像层。
可复现变更
修改页面 → git diff → docker compose build → up -d → HTTP 验证 → Git 提交。不要进入容器手工改文件作为最终方案。
实验
进入配套项目,先运行 ./verify.sh 和 docker compose config。得到 static_status=ok 且 Compose 无解析错误后,才在获得授权时执行 build/up/HTTP/down。
预期结果:静态脚本输出 static_status=ok,Compose 配置能够展开且服务名仍为 web;这还不能证明镜像已构建或网页可访问。
故障分支
- YAML 解析失败:先
docker compose config。 - 构建找不到文件:确认 context、COPY 相对路径和大小写。
- 容器 running 但 unhealthy:看健康检查输出和容器日志。
- 页面仍旧:确认镜像是否重建、容器是否替换、浏览器缓存是否影响。
自测
- Compose config 成功能证明网站可访问吗?
- .dockerignore 为什么是安全边界的一部分?
- 为什么不直接在运行容器里修页面?
答案见答案索引。
官方来源
Dockerfile reference · Compose file reference · Docker build context