引言:从“祖传代码”到“魔法配方”
想象一下这个场景:你写了一个完美的docker-compose.yml,部署了你和团队引以为傲的Web应用。但突然,测试环境的数据信地址变了,生产环境的Redis密码也需要更新。你该怎么办?是手忙脚乱地打开Compose文件,在几十行配置里小心翼翼地查找替换,然后祈祷自己没有改错地方吗?
这种“硬编码”配置的方式,就像把魔法药的配方直接刻在了坩埚上——每次想微调一下效果,都得重新熔炼一个坩埚,费时费力,还容易爆炸(出Bug)。
而Docker Compose的环境变量(Environment Variables),就是让你从这种困境中解脱出来的“魔法咒语”。它允许你将配置从应用代码和Compose文件中剥离出来,实现配置与编排的分离。今天,我们就来把这套“魔法”彻底搞懂。
第一章:环境变量基础——魔法的第一个音节
1.1 什么是环境变量?
简单来说,环境变量就是一个在程序运行时可访问的动态键值对(Key-Value)。对于容器而言,它就像是启动时传入的一串参数,告诉容器:“嘿,你该以什么样的姿态运行”。
1.2 在Docker Compose中定义环境变量
在docker-compose.yml中,你有多种方式为服务设置环境变量。
方式一:直接写在environment键下(最简单,但也最“硬”)
version: '3.8'
services:
webapp:
image: my-webapp:latest
environment:
DATABASE_HOST: db.production.example.com # 直接写死值
REDIS_URL: redis://cache.production.example.com:6379
DEBUG: "false" # 注意:布尔值最好用引号括起来,避免YAML解析为真/假值
这种方法只适用于值基本不变的情况,否则又走回了老路。
方式二:使用变量插值(引用Compose文件自身的变量)
version: '3.8'
services:
webapp:
image: my-webapp:${WEBAPP_VERSION} # 引用WEBAPP_VERSION变量
environment:
APP_VERSION: ${WEBAPP_VERSION} # 同样可以传递到容器内部的环境变量
ports:
- "${HOST_PORT}:80" # 甚至可以在端口映射中使用!

最低0.47元/天 解锁文章
3167

被折叠的 条评论
为什么被折叠?



