docker-compose中变量的使用方式

 更新时间:2024年01月17日 09:50:32   作者:玄德公笔记  
这篇文章主要介绍了docker-compose中变量的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 在docker-compose.yml 中定义变量

  • 语法
    environment:
      KEV: VELUE
      KEV: VELUE

    environment:
    - KEV=VELUE
    - KEV=VELUE
  • 示例
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'
    ......

或者

version: "3.1"
services:
  mysql:
    image: harbocto.xxx.com.cn/public/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=liubei@2021
      - MYSQL_DATABASE=liubeidb
      - TZ=Asia/Shanghai
    ......

2. 从.env 文件中引入

2.1 容器中的变量

说明:容器启动后,容器中需要用到的变量,可以在.env文件中定义

示例如下:

1)在docker-compose.yml 相同目录下创建.env目录

MYSQL_ROOT_PASSWORD=liubei@2021
MYSQL_DATABASE=mydb
TZ=Asia/Shanghai

注意:值不要加引号,引用之后会自动加

2)docker-compose.yml文件配置如下

version: "3.1"
services:
  mysql:
    image: harbocto.xxx.com.cn/public/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_DATABASE
      - TZ
    restart: on-failure
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

3) 查看结果

[root@test mysql]# docker-compose config
services:
  mysql:
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: liubei@2021
      TZ: Asia/Shanghai
    image: harbocto.xxx.com.cn/public/mysql:5.7
    ports:
    - 3306:3306/tcp
    restart: on-failure
    volumes:
    - /usr/local/mysql/data:/var/lib/mysql:rw
version: '3.1'

2.2 docker-compose启动时的变量

说明:

  • 如果变量是docker-compose.yml文件中要使用的
  • 而不是容器中需要使用的变量
  • 那么我们用如下方法引用:

1)在 2.1 中的.env目录添加如下内容

PORT_MYSQL=3306

2)docker-compose.yml文件配置如下

version: "3.1"
services:
  mysql:
    image: harbocto.xxx.com.cn/public/mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD
      - MYSQL_DATABASE
      - TZ
    restart: on-failure
    ports:
      - $PORT_MYSQL:3306
    volumes:
      - ./data:/var/lib/mysql

我们在yml文件中使用 ${PORT_MYSQL}来引用.env中的值。

2) 查看结果

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

3. 从其他文件中引用

说明:前边是引用当前目录下 .env文件中的变量,如果要引用任意文件,则示例如下:

1) 创建变量文件 /tmp/mysql_env 内容如下:

MYSQL_ROOT_PASSWORD=liubei@2021
MYSQL_DATABASE=liubeidb
TZ=Asia/Shanghai

2)docker-compose.yml 中引用

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

3) 查看结果

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

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时,查看结果

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

当宿主机定义MY_NAME=guanYu时,查看结果

[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=guanYu,mysql用户名和库名使用了该变量值。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 清理docker在var目录下的大量空间占用问题

    清理docker在var目录下的大量空间占用问题

    这篇文章主要介绍了如何清理docker在var目录下的大量空间占用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 详解基于Harbor搭建Docker私有镜像仓库

    详解基于Harbor搭建Docker私有镜像仓库

    这篇文章主要介绍了详解基于Harbor搭建Docker私有镜像仓库,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • docker容器分配固定ip的实现示例

    docker容器分配固定ip的实现示例

    如果不固定ip,每次主机重启后,docker会动态给容器分配ip,导致redis容器的IP自动换了 ,然后还得去改配置就很烦,本文主要介绍了docker容器分配固定ip的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • docker-compose启动mongo容器的使用

    docker-compose启动mongo容器的使用

    这篇文章主要介绍了docker-compose启动mongo容器的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Docker配置redis哨兵模式的方法(多服务器上)

    Docker配置redis哨兵模式的方法(多服务器上)

    这篇文章主要介绍了Docker配置redis哨兵模式的方法(多服务器上),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • docker部署redis报错内存分配过度解决办法

    docker部署redis报错内存分配过度解决办法

    Docker很适合用于测试发布,将Docker封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署,这篇文章主要给大家介绍了关于docker部署redis报错内存分配过度的解决办法,需要的朋友可以参考下
    2023-11-11
  • docker磁盘空间清理的解决办法

    docker磁盘空间清理的解决办法

    前段时间遇到docker磁盘空间太少,无法写入数据的问题。本文就来介绍一下docker磁盘空间清理的解决办法,感兴趣的可以了解一下
    2021-06-06
  • idea 连接远程 docker 并部署项目到 docker的过程

    idea 连接远程 docker 并部署项目到 docker的过程

    这篇文章主要介绍了idea连接远程docker并部署项目到docker,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • mac通过docker一键部署Nexus3的过程记录

    mac通过docker一键部署Nexus3的过程记录

    编写一些简易的 shell 脚本帮我们快速的搭建服务器,猿们只要按着套路“一步一步”的操作,基本上都可以快速部署服务,这篇文章主要介绍了mac通过docker一键部署Nexus3及安装步骤,需要的朋友可以参考下
    2022-10-10
  • 如何使用Celery和Docker处理Django中的定期任务

    如何使用Celery和Docker处理Django中的定期任务

    这篇文章主要介绍了使用Celery和Docker处理Django中的定期任务的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论