通过同一docker-compose.yml创建多个版本的运行环境

近期项目中,期望通过同一docker-compose.yml脚本,在同一个服务器上创建出多套运行环境(基础测试环境,压测测试环境,基础部署环境)。但在运行 `docker-compose -f $app_path up -d` 时,发现新环境的创建首先会关闭旧的环境,导致一次只能运行一套环境。

通过查阅文章,和--help指令发现是因为docker-compose默认会以文件夹名作为docker-compose项目名,因此同一套docker-compose工程多次运行会生成相同的project,新的project会顶掉老的project。

示例docker-compose.yml如下,通过配置.env文件设置环境变量,配置不同环境下的容器端口及容器命名。

version: "3"

services:
  mysql:
    container_name: "mysql$ENV_NAME_SUFFIX"
    restart: always
    image: mysql:5.7
    privileged: true
    env_file:
      - ../../.env
    ports:
      - ${DB_PORT}:3306
    volumes:
      - ./mysql/log:/var/log/mysql
      - ./mysql/mysql-files:/var/lib/mysql-files
      - ./mysql/data:/var/lib/mysql
      - ./mysql/config:/etc/mysql/conf.d
      - ../server/sql:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
      TZ: Asia/Shanghai
    # user: 1001:1001
    command: --lower_case_table_names=1
    networks:
     - default

  redis:
    container_name: "redis$ENV_NAME_SUFFIX"
    image: redis:4.0.9
    restart: always
    environment:
      REDIS_PASSWORD: ${REDIS_PASSWORD}
      TZ: Asia/Shanghai
    ports:
      - ${REDIS_PORT}:6379
    volumes:
      - ./redis/redis.conf:/etc/redis/redis.conf
      - ./redis/data:/data
    command: redis-server /etc/redis/redis.conf --requirepass $REDIS_PASSWORD --appendonly yes
    networks:
     - default

networks:
  default:
    external:
      name: ${ENV_NETWORK}

最终通过docker-compose -p 解决生成新的独立环境的问题。

docker-compose -f $app_path -p $(basename $app)$ENV_NAME_SUFFIX up -d

参考文章

https://stackoverflow.com/questions/41831582/how-do-i-run-the-same-docker-compose-yml-several-times-on-same-docker-daemon-wit

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值