When you define your app with Compose in development, you can use this definition to run your application in different environments such as CI, staging, and production.
The easiest way to deploy an application is to run it on a single server, similar to how you would run your development environment. If you want to scale up your application, you can run Compose apps on a Swarm cluster.
You probably need to make changes to your app configuration to make it ready for production. These changes may include:
restart: always
to avoid downtimeFor this reason, consider defining an additional Compose file, say production.yml
, which specifies production-appropriate configuration. This configuration file only needs to include the changes you’d like to make from the original Compose file. The additional Compose file can be applied over the original docker-compose.yml
to create a new configuration.
Once you’ve got a second configuration file, tell Compose to use it with the -f
option:
docker-compose -f docker-compose.yml -f production.yml up -d
See Using multiple compose files for a more complete example.
When you make changes to your app code, remember to rebuild your image and recreate your app’s containers. To redeploy a service called web
, use:
$ docker-compose build web
$ docker-compose up --no-deps -d web
This first rebuilds the image for web
and then stop, destroy, and recreate just the web
service. The --no-deps
flag prevents Compose from also recreating any services which web
depends on.
You can use Compose to deploy an app to a remote Docker host by setting the DOCKER_HOST
, DOCKER_TLS_VERIFY
, and DOCKER_CERT_PATH
environment variables appropriately. For tasks like this, Docker Machine makes managing local and remote Docker hosts very easy, and is recommended even if you’re not deploying remotely.
Once you’ve set up your environment variables, all the normal docker-compose
commands work with no further configuration.
Docker Swarm, a Docker-native clustering system, exposes the same API as a single Docker host, which means you can use Compose against a Swarm instance and run your apps across multiple hosts.
Read more about the Compose/Swarm integration in the integration guide.
compose, orchestration, containers, production
© 2019 Docker, Inc.
Licensed under the Apache License, Version 2.0.
Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. in the United States and/or other countries.
Docker, Inc. and other parties may also have trademark rights in other terms used herein.
https://docs.docker.com/compose/production/