-
Notifications
You must be signed in to change notification settings - Fork 3
Docker Compose
A docker-compose
file is basically a series of docker run
commands, turned into a structured data format instead of a list of command line parameters.
So each :
is a variable assignment.
When you want to define a network for services in a docker-compose
file to run in the syntax is as follows:
networks:
<network_name>:
driver: bridge
ipam:
config:
- subnet: '<ipv4_address>/<address_range>'
An example for the subnet would be subnet: '172.168.0.0/24'
Then under each service you want to add to a network you place a corresponding networks:
tag, as such:
<service_name>:
image: <image_name>
container_name: <container_name>
networks:
<network_name>:
ipv4_address: <ipv4_address>
And the <ipv4_address>
under the service must be in the subnet the network provides. Further note that one service may be part of multiple networks.
Of note there are two types of docker volume:
- Bind type volumes (mounted to a particular part of your filesystem, with a path specified in the
docker-compose.yaml
) - Named volumes (managed by docker, not necessarily something you can directly access in your filesystem, must use
docker volume [command]
)
docker-compose
provides mechanisms for doing both of these types of volume.
Below is an example of a freeipa
service that has both types. Note that for the named volume, you need to define a volumes
tab to create it.
In this example the data
volume is the named volume, while /srv/sys/fs/cgroup:/sys/fs/cgroup:ro
is a bind type. There are also ways to explicitly
state each volume type. Example to be added later.
services:
freeipa:
image: cloyne/freeipa-server
container_name: freeipa-server-container
volumes:
- /srv/sys/fs/cgroup:/sys/fs/cgroup:ro
- data:/data
volumes:
data: