This is a wrapper on docker-compose, which extends compose file syntax to keep several configurations (states) of your services in one file, with similar to docker-compose file syntax using native YAML anchors and aliases.
- Render in-memory docker-compose file for required state from states file.
- Call docker-compose app with rendered file (state) and apply required docker-compose command on it.
It's a YAML file with two required sections: compose and states.
Section compose is regular docker-compose config excluding services section:
compose:
version: '3.4'
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
volumes:
data:
media:
Section states is a list of states with description of services section for each state:
states:
live:
services:
backend: *backend_service
database: *database_service
webserver: *webserver_service
You can describe service in separate section or inside states section. Also, you can inherit early described service and override some parameters in place:
states:
local:
services:
database: &database_local_service
<<: *database_service
ports:
- "127.0.0.1:5432:5432"
The rest of the sections you can use for you own purposes. For example to configure logging for all services:
---
compose:
...
config:
logging: &logging_config
driver: "json-file"
options:
max-size: 50m
components:
backend: &backend_service
...
logging: *logging_config
database: &database_service
...
logging: *logging_config
webserver: &webserver_service
...
logging: *logging_config
states:
live:
services:
backend: *backend_service
database: *database_service
webserver: *webserver_service
tcompose [-h] [-f FILE] state [docker-compose parameters]
Positional arguments:
- state - state to render docker-compose file
- docker-compose parameters - any command and its parameters accepted by docker-compose except parameter for docker-compose file (-f, --file)
Optional arguments:
- -h, --help - to show help message
- -f FILE, --file FILE - path to states file, by default: states.yml
Examples:
tcompose local_dev config
tcompose live -f /path/to/my-custom-states.yml up -d
tcompose qa -f /path/to/states.yml --project-name acme up