生产环境Docker搭建需围绕安全、稳定、可观测、可维护四大目标系统配置:选Ubuntu 20.04 LTS或CentOS Stream 8+系统,内核≥5.4,确认storage driver为overlay2;/var/lib/docker单独SSD挂载≥50GB并禁用swap;镜像统一用-alpine/-slim基础镜像,强制多阶段构建,禁用latest标签;容器必须设内存/CPU限制、非root运行、只读挂载、HEALTHCHECK及自动重启;日志用local驱动+轮转,输出至stdout/stderr;网络走自定义bridge,对外服务经反向代理,私有仓库启用TLS并定期漏洞扫描。

基础环境与存储驱动
选对底层支撑,后续才少出问题:
- 操作系统推荐 Ubuntu 20.04 LTS 或 CentOS Stream 8+,内核 ≥ 5.4(确保 overlay2 驱动稳定)
- 安装后立即验证存储驱动:
docker info | grep "Storage Driver",确认是 overlay2(非 aufs 或 devicemapper) - /var/lib/docker 分区建议单独挂载,容量不低于 50GB,使用 SSD;若用 LVM,预留扩容空间
- 禁用 swap(
sudo swapoff -a),并在/etc/fstab中注释掉 swap 行——Kubernetes 和多数容器编排器明确要求
镜像与构建规范
镜像不是越“全”越好,而是越“专”越稳:
- 基础镜像统一用 -alpine 或 -slim 变体(如
node:18-alpine、python:3.11-slim),避免带完整包管理器的胖镜像 - 强制启用 多阶段构建:开发依赖只留在 builder 阶段,最终镜像只含运行时文件和最小依赖
- 禁止在 Dockerfile 中写死密钥、token、数据库地址;敏感配置全部通过
ENV+env_file或 secrets 注入 - 镜像标签必须语义化(如
v1.2.0-prod),禁用latest——CI/CD 流水线中要可追溯、可回滚
容器运行时加固
每个容器都应有明确的资源边界和最小权限:
- 必须设置内存与 CPU 限制:
--memory=512m --memory-swap=1g --cpus=1.0,防止单个容器拖垮整机 - 禁止以 root 运行应用进程:
USER nonrootuser(Dockerfile 中创建普通用户并切换) - 挂载目录设为只读(
:ro),临时目录用--tmpfs;关键路径如/etc、/proc、/sys默认不挂载 - 启用健康检查(
HEALTHCHECK)并配自动重启策略:--restart=unless-stopped或--restart=on-failure:5
日志与可观测性
没日志等于没监控,日志失控等于磁盘爆炸:
- 禁止依赖默认的 json-file 日志驱动;生产环境统一用
local或syslog,并强制轮转:--log-opt max-size=100m --log-opt max-file=5 - 应用日志输出到 stdout/stderr(别写文件!),由 Docker 统一收集;结构化日志(JSON 格式)优先
- 所有容器加
--label env=prod等标签,方便后续用 Prometheus+cadvisor 或 Loki 做聚合查询 - DNS、网络、存储等基础设施层日志也需采集(如 dnsmasq 容器开启
log-queries并挂载日志卷)
网络与安全隔离
容器不是裸奔,网络也要有“门禁”:
- 禁用默认 bridge 网络暴露端口;生产服务走自定义 bridge 网络(
docker network create --driver bridge --subnet 172.20.0.0/16 prod-net) - 对外服务用反向代理(Nginx / Traefik)统一入口,容器间通信走内部网络,不暴露原始端口
- 私有镜像仓库必须启用 TLS(自签或 Let’s Encrypt),客户端配置
tlscacert;禁用insecure-registries - 定期扫描镜像漏洞:
docker scan <image>或集成 Trivy 进 CI 流程,阻断高危镜像上线


















