加油
努力

如何在一台服务器上管理多个Docker应用?

在一台服务器上管理多个 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 SwarmKubernetes (k8s) 进行编排。


总结:推荐架构

工具 用途
Docker Compose 每个应用独立部署
自定义 Networks 安全通信
Nginx/Traefik 统一入口、域名路由
Portainer 图形化管理
Watchtower 自动更新
.env + 项目名 配置与命名隔离

最佳实践建议

  • 每个应用放在独立目录
  • 使用反向X_X暴露服务
  • .env 管理配置
  • 设置资源限制
  • 定期备份数据卷

这样可以在单台服务器上清晰、安全、高效地运行多个 Docker 应用。

云服务器