每次部署必需要修改的配置從交付件里獨(dú)立出來(lái)乾蛤,通過(guò)docker-compose傳變量覆蓋原有配置,記錄下, 以備查閱
[root@test03 test]# cat docker-compose.yml
version: '2'
services:
mysql:
image: test_db:v1
container_name: xx-mysql
restart: always
networks:
- nets
environment:
- MYSQL_ROOT_PASSWORD=xxx0209
ports:
- 3306:3306
volumes:
- /opt/data/mysql:/var/lib/mysql:z
redis:
image: test_redis:v1
container_name: xx-redis
restart: always
networks:
- nets
ports:
- 6379:6379
admin:
image: test_admin:v1
container_name: xx-admin
restart: always
# 使用nets網(wǎng)絡(luò)
networks:
- nets
env_file:
- ./.env
environment:
# 引用環(huán)境變量,最終是傳入容器里交付件的啟動(dòng)命令中
# 例 java -jar -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Xmx1433m -Dglobal.domain.inter=http://10.90.2.103:8080 ./app.jar
- JAVA_OPTS=-Duser.timezone=GMT+08 ${Xmx} -D${inter}
depends_on:
- mysql
- redis
ports:
- ${pub_port}:8015
# 創(chuàng)建自定義網(wǎng)絡(luò)
networks:
nets:
external: false
- 容器間應(yīng)用交互使用container_name定義的名稱
Xmx,inter,pub_port是我用到的環(huán)境變量站绪,通過(guò)查閱文檔,變量可以定義到一個(gè)文件中,如定義到.env中,如下:
[root@test03 test]# cat .env
# memory
Xmx=-Xmx1433m
# open ports
pub_port=8080
# inter
inter=global.domain.inter=http://10.90.2.103:8080
注意: env_file和environment中定義的環(huán)境變量是傳給container用的而不是在docker-compose.yml中的環(huán)境變量用的
docker-compose.yml中的環(huán)境變量${VARIABLE:-default}引用的是在.env中定義的或者同個(gè)shell export出來(lái)的
可以通過(guò)命令查看變量已經(jīng)被引用了
[root@test03 test]# docker-compose config
...
environment:
JAVA_OPTS: -Duser.timezone=GMT+08 -Xmx1433m -Dglobal.domain.inter=http://10.90.2.103:8080
...
- 建議env_file 引入的文件名為.env,最好不要使用其他名稱
- 優(yōu)點(diǎn): .env文件變更會(huì)實(shí)時(shí)更新docker-compose中的引用抓半,使用其他名稱不會(huì)實(shí)時(shí)更新docker-compose中的引用,使用其他名稱在docker-compose中引用有時(shí)會(huì)WARNING: The DB_DIR variable is not set. Defaulting to a blank string.
- 缺點(diǎn): 自定義名稱不方便