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

Docker Swarm中如何实现类似Kubernetes Namespaces的Prod与Preprod隔离?

Docker Swarm 实现生产/预生产环境隔离(类似Kubernetes Namespaces)

Docker Swarm本身没有原生的Namespace概念,但可以通过以下几种方式实现生产(Prod)与预生产(Preprod)环境的隔离,达到类似Kubernetes Namespaces的效果:

1. 服务命名前缀+标签区分

  • 给不同环境的服务加上明确前缀,比如prod-、preprod-,直观区分服务所属环境
  • 为服务添加环境标签,方便后续过滤管理:
    • 创建生产环境服务:docker service create --name prod-api --label environment=prod nginx
    • 查看所有生产环境服务:docker service ls --filter label=environment=prod

2. 独立Overlay网络隔离

为两个环境分别创建专属的Overlay网络,实现网络层面的隔离,不同环境的服务默认无法互相通信:

  • 创建生产环境网络:docker network create --driver overlay prod-net
  • 创建预生产环境网络:docker network create --driver overlay preprod-net
  • 创建服务时绑定对应网络:
    docker service create --name prod-api --network prod-net nginx
    docker service create --name preprod-api --network preprod-net nginx
    

3. 配置与密钥的环境隔离

利用Swarm的Config和Secret功能,为不同环境创建独立的配置/密钥资源:

  • 创建生产环境数据库配置:docker config create prod-db-config ./prod-db.conf
  • 创建预生产环境数据库配置:docker config create preprod-db-config ./preprod-db.conf
  • 服务挂载对应配置:
    docker service create --name prod-db --config source=prod-db-config,target=/etc/db.conf mysql
    docker service create --name preprod-db --config source=preprod-db-config,target=/etc/db.conf mysql
    

4. 节点标签约束调度(可选)

如果需要将不同环境的服务调度到指定节点,可通过节点标签实现:

  • 给Worker节点打环境标签:
    docker node update --label-add environment=prod worker1
    docker node update --label-add environment=preprod worker2
    
  • 创建服务时指定调度约束:
    docker service create --name prod-api --constraint 'node.labels.environment==prod' nginx
    docker service create --name preprod-api --constraint 'node.labels.environment==preprod' nginx
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:15:02