docker-compose定义和引用变量

1. 在yml文件中定义变量

添加 environment:字段,后边跟数组格式 " key: val "

# docker-compose.yml
version: '3'
services:
  db:
    image: 'docker.io/mysql:latest'
    ……
    environment:
      MYSQL_ROOT_PASSWORD: "liubei@2021"
      MYSQL_USER: 'liubei'
      MYSQL_PASSWORD: 'liubei@2021'
      MYSQL_DATABASE:  'liubeidb'
    ……

2. 在.env文件中的变量

2.1 容器中引用为环境变量

  • .env 文件
TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=liubei@2021
  • docker-compose.yml文件
    添加 environment:字段,后边跟数组格式 " - xxxx "
version: '3'
services:
  mysql:
    image: 'docker.io/mysql:latest'
    restart: always
    container_name: mysql
    ports:
      - '13306:3306'
    environment:
      - MYSQL_ROOT_PASSWORD
      - TZ
  • 查看结果
[root@n9e-v5 mysql]# docker-compose config
services:
  mysql:
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: liubei@2021
      TZ: Asia/Shanghai
    image: docker.io/mysql:latest
    ports:
    - 13306:3306/tcp
    restart: always
version: '3.0'

2.2 yml文件启动容器时的变量

说明:比如映射出哪个端口,容器的名字等等。这些并不是容器中的变量,我们也可以直接在.env文件中定义。

  • .env文件
TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=liubei@2021
PORT=13306
  • docker-compose.yml文件
version: '3'
services:
  mysql:
    image: 'docker.io/mysql:latest'
    restart: always
    container_name: mysql
    ports:
      - '${PORT}:3306'
    environment:
      - MYSQL_ROOT_PASSWORD
      - TZ
  • 查看
[root@n9e-v5 mysql]# docker-compose config
services:
  mysql:
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: liubei@2021
      TZ: Asia/Shanghai
    image: docker.io/mysql:latest
    ports:
    - 13306:3306/tcp
    restart: always
version: '3.0'

3. 引用其他文件的变量

  • 变量文件
    创建 test.env 文件

  • docker-compose.yml 文件
    添加 env_file: 字段

version: '3'
services:
  mysql:
    image: 'docker.io/mysql:latest'
    restart: always
    container_name: mysql
    ports:
      - '13306:3306'
    environment:
      ABC: abc_abc
    env_file:
      - ./test.env
  • 查看结果

services:
  mysql:
    container_name: mysql
    environment:
      ABC: abc_abc
      MYSQL_ROOT_PASSWORD: liubei@2021
      PORT: '13306'
      TZ: Asia/Shanghai
    image: docker.io/mysql:latest
    ports:
    - 13306:3306/tcp
    restart: always
version: '3.0'

4. 引用主机变量

语法示例

    environment:
      XI_SHU: ${MY_NAME:-liubei}

容器中变量key为:XI_SHU,它的值会读取宿主机key为MY_NAME的值,缺省默认使用liubei

完整示例

  • yml文件
version: "3.1"
services:
  mysql:
    image: harbocto.boe.com.cn/public/mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'liubei@2021'
      TZ: Asia/Shanghai
      MYSQL_USER: ${MY_NAME:-liubei}
      MYSQL_PASSWORD: 'liubei@2021'
      MYSQL_DATABASE: ${MY_NAME:-liubei}db
    restart: always
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
  • 当宿主机没有定义MY_NAME时,查看结果
[root@liubei mysql]# echo $MY_NAME

[root@liubei mysql]# docker-compose config
services:
  mysql:
    environment:
      MYSQL_DATABASE: liubeidb
      MYSQL_PASSWORD: liubei@2021
      MYSQL_ROOT_PASSWORD: Boe888888
      MYSQL_USER: liubei
      TZ: Asia/Shanghai
    image: harbocto.boe.com.cn/public/mysql:5.7
    ports:
    - 3306:3306/tcp
    restart: always
    volumes:
    - /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'

如上可见,因为宿主机没有变量MY_NAME,mysql用户名和库名使用了默认值。

  • 当宿主机定义MY_NAME=guanYu时,查看结果
[root@liubei mysql]# export MY_NAME=guanYu
[root@liubei mysql]# echo $MY_NAME
guanYu
[root@liubei mysql]# docker-compose config
services:
  mysql:
    environment:
      MYSQL_DATABASE: guanYudb
      MYSQL_PASSWORD: liubei@2021
      MYSQL_ROOT_PASSWORD: Boe888888
      MYSQL_USER: guanYu
      TZ: Asia/Shanghai
    image: harbocto.boe.com.cn/public/mysql:5.7
    ports:
    - 3306:3306/tcp
    restart: always
    volumes:
    - /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'

如上可见,因为宿主机定义了变量MY_NAME=guanYu,mysql用户名和库名使用了该变量值。


你可能感兴趣的:(docker-compose定义和引用变量)