忘机山人
看过很多的Docker教程,也都不曾提到过compose override,第一次接触到这个是在懒猫微服上解开LPK看到的,用来注入docker 引擎的环境变量。但是还以为是懒猫微服的小技巧,今天整理笔记才发现原来的Docker compose用来做多环境部署的配置文件,比如用来给开发和生产分别注入不同的环境变量和配置文件。
使用场景是这样,在实际开发中,通常我们需要分别为开发和生产环境配置不同的服务和环境变量。虽然可以为每个环境维护独立的 Compose 文件,Docker Compose 提供了一个非常有用的特性,可以将多个 Compose 文件结合使用,简化配置管理。
默认情况下,Compose 会读取以下两个文件:
你还可以通过 -f 参数指定多个非默认的覆盖文件,Compose 会按顺序合并这些文件。
docker compose -f docker-compose.yml -f dev.override.yml up
services:
web:
image: nginx:latest
ports:
- "80:80"
services:
web:
volumes:
- ./dev:/usr/share/nginx/html # 使用本地开发文件夹覆盖默认卷
environment:
- DEBUG=true # 启用开发环境的调试模式

在这个例子中,docker-compose.override.yml 覆盖了 docker-compose.yml 中的配置,添加了开发环境相关的文件挂载和环境变量设置。

docker-compose config 命令生成的配置)name: "3"
services:
web:
environment:
DEBUG: "true"
image: nginx:latest
networks:
default: null
ports:
- mode: ingress
target: 80
published: "80"
protocol: tcp
volumes:
- type: bind
source: /Users/name/Desktop/dev
target: /usr/share/nginx/html
bind:
create_host_path: true
networks:
default:
name: 3_default
可以看到,通过合并配置,开发环境的调试模式和本地文件夹挂载已经成功加入了配置。
针对一些 lpk 规范目前无法覆盖到的运行权限需求, 可以通过 compose override 机制来间接实现。
通过应用查看器可以看到,这是 Docker Compose 配置的一部分,用于定义容器中的 containly 服务,并映射playground的docker引擎。具体的配置说明如下:
containly 是定义的一个服务名称。containly。create_host_path: true,意思是如果宿主机上的 /data/playground 目录不存在,它会自动创建。/data/playground 作为源路径,意味着宿主机上的这个目录将被挂载到容器内。source 目录映射到容器内部的 /lzcapp/run/playground 目录。容器内的应用可以访问这个目录。bind,表示采用绑定挂载方式
最后highlight下WIKI里的三句话:
lpk 中存在名为 compose.override.yml 的文件,并且内容是一个合法的 Compose 合并文件。/data/system/pkgm/run/$appid 目录,确认该目录下是否存在 override.yml 文件。lzc-docker-compose config 命令查看最终合并后的配置,确保它符合预期。子/data/system/pkgm/run/$appid目录里,我的结果如下,供参考。
docker compose config
name: xudeploycontainly
services:
app:
....
- type: bind
source: /data/playground
target: /lzcapp/run/playground
bind:
create_host_path: true
...
(base) lzcbox-029c588e /data/system/pkgm/run/xu.deploy.containly # ls
compose.override.yml docker-compose.yml pkg
(base) lzcbox-029c588e /data/system/pkgm/run/xu.deploy.containly # cat compose.override.yml
services:
containly:
volumes:
- bind:
create_host_path: true
source: /data/playground
target: /lzcapp/run/playground
type: bind
评论
0暂无评论