在一台服务器上管理多个 Docker 应用,需要良好的组织、资源隔离和自动化工具。以下是系统性的方法和最佳实践:
一、使用 Docker Compose 管理多应用
Docker Compose 是管理多个容器(一个应用)的首选工具。
示例:部署两个独立应用
/server-apps/
├── app1/
│ ├── docker-compose.yml
│ └── .env
├── app2/
│ ├── docker-compose.yml
│ └── .env
└── nginx-proxy/
└── docker-compose.yml
app1/docker-compose.yml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
app2/docker-compose.yml
version: '3.8'
services:
api:
image: node:16
ports:
- "3000:3000"
working_dir: /app
command: npm start
启动应用
cd app1 && docker-compose up -d
cd ../app2 && docker-compose up -d
二、使用反向X_X统一访问(推荐)
避免端口冲突,使用 Nginx 或 Traefik 做反向X_X。
使用 Nginx Proxy Manager 或 Caddy
# nginx-proxy/docker-compose.yml
version: '3.8'
services:
nginx-proxy:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
depends_on:
- app1
- app2
或使用 nginx-proxy 自动发现服务。
三、使用命名空间或项目名隔离
避免容器名称冲突:
docker-compose -p app1 up -d
docker-compose -p app2 up -d
查看特定项目的容器:
docker-compose -p app1 ps
四、使用环境变量配置不同环境
.env 文件示例:
# app1/.env
APP_PORT=8080
DB_HOST=db1
在 docker-compose.yml 中引用:
services:
web:
ports:
- "${APP_PORT}:80"
五、使用 Docker Network 实现安全通信
创建自定义网络,让应用间通信更安全:
docker network create backend
在 compose 文件中指定网络:
services:
web:
networks:
- backend
db:
networks:
- backend
networks:
backend:
external: true
六、集中管理工具(可选)
1. Portainer(图形化界面)
docker run -d -p 9000:9000 --name portainer
-v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data
portainer/portainer-ce
→ 可视化管理所有容器、镜像、网络。
2. Watchtower(自动更新镜像)
docker run -d
--name watchtower
-v /var/run/docker.sock:/var/run/docker.sock
containrrr/watchtower
七、资源限制与监控
防止某个应用占用过多资源:
services:
app:
mem_limit: 512m
cpus: 1.0
restart: unless-stopped
使用 docker stats 监控资源使用。
八、日志管理
集中查看日志:
docker-compose -p app1 logs -f
或将日志输出到文件或 ELK/Syslog。
九、备份与恢复策略
- 定期备份卷(
/var/lib/docker/volumes) - 使用
docker commit或镜像版本控制 - 脚本化部署流程(如 shell 脚本或 Makefile)
十、进阶:迁移到 Kubernetes(大规模时)
当应用数量增多,考虑使用 Docker Swarm 或 Kubernetes (k8s) 进行编排。
总结:推荐架构
| 工具 | 用途 |
|---|---|
| Docker Compose | 每个应用独立部署 |
| 自定义 Networks | 安全通信 |
| Nginx/Traefik | 统一入口、域名路由 |
| Portainer | 图形化管理 |
| Watchtower | 自动更新 |
| .env + 项目名 | 配置与命名隔离 |
✅ 最佳实践建议:
- 每个应用放在独立目录
- 使用反向X_X暴露服务
- 用
.env管理配置 - 设置资源限制
- 定期备份数据卷
这样可以在单台服务器上清晰、安全、高效地运行多个 Docker 应用。
云小栈