Make COMPOSEDOCKERCLIBUILD=1 the default. Add usage metrics. Sync schema with COMPOSE specification. Improve failure report for missing mandatory environment variables. Bump attrs to 20.3.0. Bump moreitertools to 8.6.0. Bump cryptograhy to 3.2.1. Bump cffi to 1.14.4. Bump virtualenv to 20.2.2. Bump bcrypt to 3.2.0. Bump gitpython to 3.1.11. Use Docker Compose. Docker Compose provides a way to orchestrate multiple containers that work together. Examples include a service that processes requests and a front-end web site, or a service that uses a supporting function such as a Redis cache.
Estimated reading time: 6 minutes
This page applies to Compose file formats version 2 and higher. Networking features are not supported for Compose file version 1 (deprecated).
By default Compose sets up a singlenetwork for your app. Eachcontainer for a service joins the default network and is both reachable byother containers on that network, and discoverable by them at a hostnameidentical to the container name.
Docker Compose is a tool used to define and run multi-container Docker applications. Users utilize this software to launch, execute, communicate, and close containers with a single coordinated command. Nov 19, 2019 Docker Compose is a tool used to define and run multi-container Docker applications. Users utilize this software to launch, execute, communicate, and close containers with a single coordinated command. Update containers If you make a configuration change to a service and run docker-compose up to update it, the old container is removed and the new one joins the network under a different IP address but the same name.
Note
Your app’s network is given a name based on the “project name”,which is based on the name of the directory it lives in. You can override theproject name with either the --project-name
flagor the COMPOSE_PROJECT_NAME
environment variable.
For example, suppose your app is in a directory called myapp
, and your docker-compose.yml
looks like this:
When you run docker-compose up
, the following happens:
- A network called
myapp_default
is created. - A container is created using
web
’s configuration. It joins the networkmyapp_default
under the nameweb
. - A container is created using
db
’s configuration. It joins the networkmyapp_default
under the namedb
.
In v2.1+, overlay networks are always attachable
Starting in Compose file format 2.1, overlay networks are always created asattachable
, and this is not configurable. This means that standalonecontainers can connect to overlay networks.
In Compose file format 3.x, you can optionally set the attachable
propertyto false
.
Each container can now look up the hostname web
or db
andget back the appropriate container’s IP address. For example, web
’sapplication code could connect to the URL postgres://db:5432
and startusing the Postgres database.
It is important to note the distinction between HOST_PORT
and CONTAINER_PORT
.In the above example, for db
, the HOST_PORT
is 8001
and the container port is5432
(postgres default). Networked service-to-servicecommunication uses the CONTAINER_PORT
. When HOST_PORT
is defined,the service is accessible outside the swarm as well.
Within the web
container, your connection string to db
would look likepostgres://db:5432
, and from the host machine, the connection string wouldlook like postgres://{DOCKER_IP}:8001
.
Update containers
If you make a configuration change to a service and run docker-compose up
to update it, the old container is removed and the new one joins the network under a different IP address but the same name. Running containers can look up that name and connect to the new address, but the old address stops working.
If any containers have connections open to the old container, they are closed. It is a container’s responsibility to detect this condition, look up the name again and reconnect.
Links
Links allow you to define extra aliases by which a service is reachable from another service. They are not required to enable services to communicate - by default, any service can reach any other service at that service’s name. In the following example, db
is reachable from web
at the hostnames db
and database
:
See the links reference for more information.
Multi-host networking
When deploying a Compose application on an Docker Engine with Swarm mode enabled,you can make use of the built-in overlay
driver to enable multi-host communication.
Consult the Swarm mode section, to see how to set upa Swarm cluster, and the Getting started with multi-host networkingto learn about multi-host overlay networks.
Specify custom networks
Instead of just using the default app network, you can specify your own networks with the top-level networks
key. This lets you create more complex topologies and specify custom network drivers and options. You can also use it to connect services to externally-created networks which aren’t managed by Compose.
Each service can specify what networks to connect to with the service-levelnetworks
key, which is a list of names referencing entries under the top-levelnetworks
key.
Here’s an example Compose file defining two custom networks. The proxy
service is isolated from the db
service, because they do not share a network in common - only app
can talk to both.
Networks can be configured with static IP addresses by setting the ipv4_address and/or ipv6_address for each attached network.
Networks can also be given a custom name (since version 3.5):
Docker Compose Update
For full details of the network configuration options available, see the following references:
Configure the default network
Instead of (or as well as) specifying your own networks, you can also change the settings of the app-wide default network by defining an entry under networks
named default
:
Use a pre-existing network
If you want your containers to join a pre-existing network, use the external
option:
Docker Compose Update Environment Variables
Instead of attempting to create a network called [projectname]_default
, Compose looks for a network called my-pre-existing-network
and connect your app’s containers to it.