V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shenyuan
V2EX  ›  问与答

同时运行多套 docker-compose up 的环境,不同网段相互隔离

  •  1
     
  •   shenyuan · 2017-11-05 11:08:02 +08:00 · 3009 次点击
    这是一个创建于 2369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的方法是写一个 docker-compose.yml 的模本文件,然后去替换里面的相关参数,例如模板文件如下:

    version: '2'
    services:
      db:
        image: mysql
        container_name: $db_name
        networks:
          - app_net
      web:
        build: ./web
        expose:
          - "80"
          - "443"
          - "8080"
        networks:
          app_net:
            ipv4_address: $web_ip
        container_name: $web_name
        depends_on:
          - db
        links:
          - db
        
    networks:
      app_net:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: $subnet
              gateway: $gateway
    

    模板文件通过 python string 的 Template 进行变量替换,通过替换 subnet、gateway 以及 container_name、web_ip 的方法来生成不同的 docker-compose.yml 文件,感觉这种方式不是很优雅,有没有更好的方案呢?

    3 条回复    2017-11-05 11:55:08 +08:00
    dangyuluo
        1
    dangyuluo  
       2017-11-05 11:25:58 +08:00
    可以考虑在不同的 docker-compose.yaml 目录下生成不同的.env 环境文件?这样比较好管理一点。
    然后在里面定义网络,ip, container 等等
    dangyuluo
        2
    dangyuluo  
       2017-11-05 11:28:08 +08:00   ❤️ 1
    你可以生成环境文件,保持 yaml 模版不变,然后在运行 docker-compose 的时候使用--env-file 参数来指定。
    Elegant
    shenyuan
        3
    shenyuan  
    OP
       2017-11-05 11:55:08 +08:00
    @dangyuluo 初步测试应该是可行的,修改模板文件里面的$subnet 为 "${SUBNET}",然后.env 文件里指定 SUBNET=172.18.1.0/24 这种方式,在 docker-compose up 的时候默认会到当前目前下去找.env 里面的环境变量进行替换,用 docker-compose config 也验证了的确是进行了替换
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   782 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:45 · PVG 04:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.