Docker Compose 单机生产部署指南,覆盖官方安装、不可变镜像、环境变量、健康检查、持久化卷、端口安全、日志、更新回滚与重启排查。
Docker Compose 可以在单台云服务器上运行正式应用,但生产部署不能直接照搬本地开发文件。至少要处理镜像来源、环境变量、持久化卷、健康检查、重启策略、日志、端口暴露、备份和更新回滚。
Compose 适合单机或规模明确的服务组合;如果需要跨多台主机自动调度、多副本编排和复杂发布策略,应评估 Kubernetes、ECS 或其他编排平台。
单机 Compose 生产部署结构

安装 Docker 前先检查什么
- 系统版本和 CPU 架构是否在 Docker 支持范围;
- 是否已安装冲突的 docker.io、旧 Compose、containerd 或 runc 包;
- 根分区和
/var/lib/docker容量; - 云安全组和系统防火墙;
- 备份与维护窗口。
Ubuntu 正式环境优先按 Docker 官方 apt 仓库安装 Docker Engine、Buildx 和 Compose 插件。便利脚本仅推荐测试和开发使用。安装后验证:
sudo systemctl status docker --no-pager
sudo docker run --rm hello-world
docker compose version
Compose 文件应包含哪些生产要素
services:
web:
image: YOUR_REGISTRY/YOUR_IMAGE:IMMUTABLE_TAG
restart: unless-stopped
env_file:
- .env
ports:
- "127.0.0.1:APP_PORT:APP_PORT"
healthcheck:
test: ["CMD", "YOUR_HEALTH_COMMAND"]
interval: 30s
timeout: 5s
retries: 3
volumes:
- app_data:/var/lib/YOUR_APP
volumes:
app_data:镜像标签、端口、健康命令和目录必须替换。数据库密码等机密不应提交到 Git;.env 也不是完整的密钥管理系统,应限制文件权限并规划轮换。
为什么端口绑定到 127.0.0.1
如果 Nginx 在同机反向代理,将应用端口绑定到本机可以减少公网暴露。Docker 发布端口可能绕过 UFW 的直观规则,不能因为 UFW 显示关闭就假设容器端口不可从公网访问。应同时检查 Docker 的 iptables/DOCKER-USER、云安全组和实际监听。
上线前怎样验证 Compose
docker compose config
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100docker compose config 可检查变量替换后的实际配置。容器处于 running 不代表应用健康,还要检查 healthcheck、HTTP 响应、数据库连接和外部依赖。
更新应用怎样保留回滚能力
- 使用不可变版本标签,不只使用 latest;
- 更新前备份数据库和持久化数据;
- 记录当前镜像 digest 与 Compose 文件;
- 拉取新镜像并仅重建目标服务;
- 检查健康、日志和关键业务;
- 异常时恢复旧标签和兼容数据。
仅执行 docker compose restart 不会应用镜像、环境变量或 Compose 配置变化。需要更新配置时应执行 up -d 触发必要的重建。
持久化和备份有哪些边界
Named volume 解决容器重建后的数据保留,但不是备份。数据库需要应用一致性备份,卷目录需要快照或文件备份;恢复演练要验证新容器能读取数据、权限正确且版本兼容。
容器一直重启怎么排查
- 查看
docker compose ps的状态和退出码; - 查看服务日志,而不是只重启;
- 检查环境变量、挂载权限和依赖地址;
- 检查 healthcheck 是否使用容器内存在的命令;
- 检查内存不足、磁盘占满和 OOM;
- 临时取消自动重启仅用于受控排障,完成后恢复策略。
常见问题
Compose 适合生产环境吗?
适合边界清晰的单机部署,但不会自动提供跨主机调度、多可用区和完整发布治理。
restart: always 等于高可用吗?
不等于。它只帮助单机上的容器重启,宿主机、区域或数据故障仍需其他方案。
Named volume 是备份吗?
不是。它是持久化方式,仍需要独立备份、保留和恢复验证。
官方资料
- Docker:Install Engine on Ubuntu
- Docker:Use Compose in production
- Docker:Compose services reference
- Docker:Compose quickstart and verification
如果需要确认云平台账户、充值或 Docker 部署方向,可通过 Telegram 联系 @heishayun。请勿发送生产密钥、完整环境变量或数据库密码。

