【Docker实战】为docker-compose.yaml文件提供环境变量

我们使用docker-compose来部署docker容器时,有时需要提供环境变量进行动态部署。

最简便的方法,就是使用.env文件。

首先进入docker-compose.yaml文件的同级根目录。编辑.env文件

vim .env

然后设置环境变量

TAG=8.0

在下面的docker-compose.yaml文件(wordpress+mysql)中使用这个TAG(格式为“${TAG}”)

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:${TAG}
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

我们使用config命令查看导入变量的情况,该命令会将解析后的应用程序配置打印到终端。

docker compose config

结果如下:

WARN[0000] /data/docker-compose.yaml: `version` is obsolete 
name: data
services:
  db:
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: "1"
      MYSQL_USER: exampleuser
    image: mysql:8.0
    networks:
      default: null
    restart: always
    volumes:
      - type: volume
        source: db
        target: /var/lib/mysql
        volume: {}
  wordpress:
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: exampledb
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_USER: exampleuser
    image: wordpress
    networks:
      default: null
    ports:
      - mode: ingress
        target: 80
        published: "8080"
        protocol: tcp
    restart: always
    volumes:
      - type: volume
        source: wordpress
        target: /var/www/html
        volume: {}
networks:
  default:
    name: data_default
volumes:
  db:
    name: data_db
  wordpress:
    name: data_wordpress

可以看到mysql的tag变为了8.0。

不过这种方法,适合于静态配置好环境变量的情况。还有一种情况,每次都需要动态设置环境变量。

比如工作中,我就遇到一种情况,需要在jenkins的pipeline中,提供版本号给docker-compose文件,使得每次docker compose up启动的容器使用不同的tag。

那么这时候就可以使用在shell中给出环境变量。

TAG=9.0 docker compose config

可以看到,mysql的tag变为了9.0。

WARN[0000] /data/docker-compose.yaml: `version` is obsolete 
name: data
services:
  db:
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: "1"
      MYSQL_USER: exampleuser
    image: mysql:9.0
    networks:
      default: null
    restart: always
    volumes:
      - type: volume
        source: db
        target: /var/lib/mysql
        volume: {}
  wordpress:
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: exampledb
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_USER: exampleuser
    image: wordpress
    networks:
      default: null
    ports:
      - mode: ingress
        target: 80
        published: "8080"
        protocol: tcp
    restart: always
    volumes:
      - type: volume
        source: wordpress
        target: /var/www/html
        volume: {}
networks:
  default:
    name: data_default
volumes:
  db:
    name: data_db
  wordpress:
    name: data_wordpress

备注:如果shell中设置了和.env文件相同的环境变量,shell的优先级要更高。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值