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/

 
 
 
 

集成direnv 与docker-compose 进行环境变量管理的更多相关文章

  1. Docker Compose 引用环境变量

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式.说明:本文的演示环境为 ubu ...

  2. direnv 一个强大的环境变量管理工具

      direnv 是一个基于golang 编写的强大的环境变量管理工具,可以帮助我们简化环境变量管理,而且 支持的平台比较多. 基本使用 下载二进制软件包 https://github.com/dir ...

  3. 解析docker中的环境变量使用和常见问题解决

    docker容器中的环境变量 docker可以为容器配置环境变量.配置的途径有两种: 在制作镜像时,通过ENV命令为镜像增加环境变量.在容器启动时使用该环境变量. 在容器启动时候,通过参数配置环境变量 ...

  4. Docker Run 设置环境变量

    Docker Run We can then override the environment variables set in the Docker file when running the im ...

  5. VSCode的Python扩展下程序运行的几种方式与环境变量管理

    在VSCode中编写Python程序时,由于有些地方要使用环境变量,但是发现设置的环境变量有时不起作用,花了点时间研究了一下,过程不表,直接说结论. 首先,环境变量的设置,Python扩展中有三种方式 ...

  6. [ Module ] 环境变量管理工具 Module 安装和使用

    https://www.cnblogs.com/yeungchie/ 1. 工具下载 手动下载 modules-5.1.0 点击下载 wget 下载 wget https://jaist.dl.sou ...

  7. Docker 查看容器环境变量

    #linux指令# printenv

  8. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

  9. Docker扩展内容之容器环境变量

    介绍 docker容器设置环境变量除了可以在容器层面的变量文件中加载也可以在容器运行之初进行预加载环境变量,下面介绍在Dockerfile中编写环境变量的方式 ENV TZ=Asia/Shanghai ...

随机推荐

  1. 20175224 2018-2019-2 《Java程序设计》第八周学习总结

    教材学习内容总结 第十五章 泛型与集合框架 泛型 泛型:目的为建立具有类型安全的集合框架. 泛型类声明:class People<E> class 名称<泛型列表> 链表 定义 ...

  2. Java垃圾回收机制和注解

  3. [Hadoop] 启动HDFS缺少服务

    启动Hadoop后使用JPS命令查看进程,发现只有NameNode和NodeManger. 原因:格式化两次namenode.导致namenode和datanode中的CID不一致. $ hadoop ...

  4. [RESTful] DHC Client

    安装Chrome的DHC插件, 进入DHC Client谷歌插件网页. 安装到Chrome浏览器: 点击Chrome设置 点击扩展程序 把刚刚下载的文件解压缩 把 .crx 后缀的文件直接拖入Chro ...

  5. 介质共享型局域网中的介质访问控制(MAC)协议需要具体解决的3个问题,CSMA/CD介质访问控制的基本思想

    1,在某一时刻,那个节点可以发送数据 2,发送时是否会出现冲突 3,出现冲突时如何处理 CSMA/CD介质访问控制的基本思想:先监听,再发送.边发送,边监听,如发生冲突,则等待一段时间后再次发送

  6. Java技术 第一次作业

    (一)学习总结 1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么? 代码开头加一句 Import java.util; 构建Sca ...

  7. vi编辑器之删除操作

    参见 1.vi列删除 方法一: ctrl+v进入列编辑模式: 将光标定位子想要删除的起始列: 移动光标至结束列(直接通过移动光标选中,对列不对齐时,可能比较长的行,无法全部选中,尤其是需要一直删除到行 ...

  8. Python_在Ubuntu中搭建科学计算环境

    本文针对 Ubuntu 下搭建 Python 科学计算的环境,罗列了关键词和部分链接,最后附上了自己的一点分享. 1.升级 关键词: python ubuntu 升级 推荐: ubuntu16.04下 ...

  9. 封装qq分享静态库到cocopod

    封装qq分享静态库到cocopod  1,创建framework库,到腾讯开放平台(open.qq.com)申请项目appid 2,将iOS SDK中的TencentOpenAPI.framework ...

  10. struts2+mybatis3+log4j2+bulma+mysql8元工程

    https://pan.baidu.com/s/1Z1YklkKEKrzhS7uM9w6ewQ https://pan.baidu.com/s/1Z1YklkKEKrzhS7uM9w6ewQ