dcmerge is a small program to merge docker-compose files from multiple sources. It is available via RPM and docker.
The dynamic pattern of a docker-compose file, that for example environments can be specified as a string slice or a
list of objects is currently not supported. dcmerge expect a strict pattern layout. The environments, ports and
volumes must be declared as a slice of strings.
Dockercompose file can be read-in from different sources. Currently are the following sources supported:
Furthermore, dcmerge support different ways to merge multiple docker-compose files.
Merge only missing secrets, services, networks and volumes without respecting their attributes. For example, when
the service app is already declared, it is not possible to add the service app twice. The second service will be
completely skipped.
---
# cat ~/docker-compose-A.yaml
services:
app:
environments:
- CLIENT_SECRET=HelloWorld123
image: example.local/app/name:0.1.0
---
# cat ~/docker-compose-B.yaml
services:
app:
image: app/name:2.3.0
volume:
- /etc/localtime:/etc/localtime
- /dev/urandom:/etc/urandom
db:
image: postgres
volume:
- /etc/localtime:/etc/localtime
- /dev/urandom:/etc/urandom
---
# dcmerge ~/docker-compose-A.yaml ~/docker-compose-B.yaml
services:
app:
environments:
- CLIENT_SECRET=HelloWorld123
image: example.local/app/name:0.1.0
db:
image: postgres
volume:
- /etc/localtime:/etc/localtime
- /dev/urandom:/etc/urandom
The existing-win merge protects existing attributes. For example there are two different docker-compose files, but booth
has the same environment variable CLIENT_SECRET defined with different values. The first declaration of the attribute
wins and is for overwriting protected.
---
# cat ~/docker-compose-A.yaml
services:
app:
environments:
- CLIENT_SECRET=HelloWorld123
image: example.local/app/name:0.1.0
---
# cat ~/docker-compose-B.yaml
services:
app:
environments:
- CLIENT_SECRET=FooBar123
image: example.local/app/name:0.1.0
---
# dcmerge --existing-win ~/docker-compose-A.yaml ~/docker-compose-B.yaml
services:
app:
environments:
- CLIENT_SECRET=HelloWorld123
image: example.local/app/name:0.1.0
The last-win merge overwrite recursive existing attributes. For example there are two different docker-compose files,
but booth has the same environment variable CLIENT_SECRET defined with different values. The last passed
docker-compose file which contains this environment wins.
---
# cat ~/docker-compose-A.yaml
services:
app:
environments:
- CLIENT_SECRET=HelloWorld123
image: example.local/app/name:0.1.0
---
# cat ~/docker-compose-B.yaml
services:
app:
environments:
- CLIENT_SECRET=FooBar123
image: example.local/app/name:0.1.0
---
# dcmerge --last-win ~/docker-compose-A.yaml ~/docker-compose-B.yaml
services:
app:
environments:
- CLIENT_SECRET=FooBar123
image: example.local/app/name:0.1.0
Content type
Image
Digest
sha256:16d4309dc…
Size
8.4 MB
Last updated
over 1 year ago
docker pull volkerraschek/dcmerge