You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一服务器上便捷克隆Docker stack 无需手动重复编写配置?

解决方案

不需要使用Kubernetes

单服务器部署10套轻量隔离环境用原生Docker Compose就能实现,完全没必要引入Kubernetes这类复杂度高的组件,足够满足赛事的临时部署需求。

具体实现步骤

1. 改造通用服务配置模板

把你现有的带编号的docker-compose配置改成无编号的通用模板,只保留单套环境的定义,命名为docker-compose.yml:

version: '3'
services:
  api:
    image: dockerjohn/tournament:latest
    environment:
      - DB=db
    expose:
      - 3000
    networks:
      - app-net
      - traefik-net
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.${COMPOSE_PROJECT_NAME}.entrypoints=web"
      - "traefik.http.routers.${COMPOSE_PROJECT_NAME}.rule=Host(`${COMPOSE_PROJECT_NAME}.example.com`)"
      - "traefik.http.services.${COMPOSE_PROJECT_NAME}.loadbalancer.server.port=3000"
      - "traefik.docker.network=traefik-net"
  db:
    image: mongo:4.0.3
    networks:
      - app-net

networks:
  app-net:
  traefik-net:
    external: true

2. 部署自动反向代理组件

放弃手动配置Apache虚拟主机,用Traefik实现容器自动发现和路由配置,单独编写Traefik的部署配置traefik.yml:

version: '3'
services:
  traefik:
    image: traefik:v2.10
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - traefik-net

先创建公共代理网络,再启动Traefik:

docker network create traefik-net
docker-compose -f traefik.yml up -d

3. 一键批量部署所有队伍环境

Docker Compose支持通过COMPOSE_PROJECT_NAME环境变量区分不同的部署栈,每个栈的容器、网络都会自动添加项目名前缀,完全隔离不会冲突。执行一行循环命令就能部署1到10号所有队伍的环境:

for i in {1..10}; do COMPOSE_PROJECT_NAME=team$i docker-compose up -d; done

方案优势

  • 所有环境完全隔离,每队的数据库和应用互不干扰
  • 不需要手动配置反向代理,Traefik会自动根据team<编号>.example.com的域名转发请求到对应队伍的应用
  • 后续新增队伍只需修改循环范围重新执行命令即可,不需要修改任何配置文件
  • 如果需要防止参赛队伍修改容器内代码,可以在api服务配置中添加read_only: true参数,容器文件系统会被设为只读,重启后所有修改都会重置。

内容的提问来源于stack exchange,提问作者learningtech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:06:01