zoukankan      html  css  js  c++  java
  • 集成direnv 与docker-compose 进行环境变量管理

    direnv 是一个不错的换将变量管理工具,同时日常的开发测试中我们使用docker-compose 会比较多,一般我们的玩法是
    可以再docker-compose 中指定环境变量,可以通过environment 或者.env 文件,或者env_file ,为了学习使用direnv工具
    集成了docker-compose

    direnv 安装

    参考 direnv 简单使用

    docker-compose 环境准备

    • docker-compose 文件

      一个比较简单的nginx web site ,传递了一个USERTYPE 的环境变量

    version: "3"
    services:
       web: 
         image: nginx
         environment: 
         - "type=${USERTYPE}"
         ports: 
         - "8080:80"
    • .envrc 文件

      direnv 默认加载的文件

    export FOO=foo
    export USERNAME=dalong
    export USERPASSWORD=demoapp
    export USERTYPE=system

    运行&&测试

    • 进入目录

      可以看到自动加载了配置

    cd envconf 
    direnv: loading .envrc                                                                                                                            
    direnv: export +FOO +USERNAME +USERPASSWORD +USERTYPE
    • 运行
    docker-compose up -d
    • 查看加载环境变量
    docker-compose exec web sh
    # env
    HOSTNAME=c14a12f49eb1
    type=system
    HOME=/root
    TERM=xterm
    NGINX_VERSION=1.15.11-1~stretch
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    NJS_VERSION=1.15.11.0.3.0-1~stretch
    PWD=/
    • 禁用环境变量加载
    direnv deny .
    docker-compose up -d
    WARNING: The USERTYPE variable is not set. Defaulting to a blank string.
    Creating envconf_web_1 ... done

    说明:通过deny 我们可以卸载加载的配置,很方便进行ci/cd 的构建

    一种基于环境加载配置的方法

    很简单,就是基于文件夹的区分,编写了不同的环境变量,基于direnv 的hook 自动加载

    • 项目结构
    ├── docker-compose.yaml
    ├── prod
    │ └── .envrc
    └── test
        └── .envrc
    • 说明
      prod 以及test 是不同环境的配置参数
    • 运行
    for test
    cd test
    direnv allow
    docker-compose -f ../docker-compose.yaml up -d
    docker-compose -f ../docker-compose.yaml exec web sh
    # env
    HOSTNAME=9d9e88b765d3
    type=user
    HOME=/root
    TERM=xterm
    NGINX_VERSION=1.15.11-1~stretch
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    NJS_VERSION=1.15.11.0.3.0-1~stretch
    PWD=/
    
    for prod
    cd prod
    建议还是执行下 direnv allow ,实际上是自动加载的 (direnv 的hook)
    docker-compose -f ../docker-compose.yaml up -d
    docker-compose -f ../docker-compose.yaml exec web sh
    HOSTNAME=a371d04f6d5d
    type=system
    HOME=/root
    TERM=xterm
    NGINX_VERSION=1.15.11-1~stretch
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    NJS_VERSION=1.15.11.0.3.0-1~stretch
    PWD=/

    说明

    以上只是一种实践,基于动态环境变量的切换我们可以做好多比较灵活的功能开发,提高实际的效率

    参考资料

    https://github.com/rongfengliang/direnv-docker-compose-demo
    https://docs.docker.com/compose/environment-variables/
    https://direnv.net/

  • 相关阅读:
    openssh升级到openssh-7.5p1踩坑
    office online server部署和简单操作
    aspnetmvc和aspnetcoremvc的一些区别
    office web app server部署和简单操作
    PHP之cURL
    认识PHP的全局变量
    认识Linux系统/etc/hosts
    git学习——stash命令(4)
    Linux netstat命令
    phpstorm+xdebug
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10730573.html
Copyright © 2011-2022 走看看