|  | @@ -11,20 +11,22 @@ parent="smn_workw_compose"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # Overview of Docker Compose
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Compose is a tool for defining and running multi-container applications with
 | 
	
		
			
				|  |  | -Docker. With Compose, you define a multi-container application in a single
 | 
	
		
			
				|  |  | -file, then spin your application up in a single command which does everything
 | 
	
		
			
				|  |  | -that needs to be done to get it running.
 | 
	
		
			
				|  |  | +Compose is a tool for defining and running multi-container Docker applications.
 | 
	
		
			
				|  |  | +With Compose, you define a multi-container application in a compose
 | 
	
		
			
				|  |  | +file then, using a single command, you create and start all the containers
 | 
	
		
			
				|  |  | +from your configuration. To learn more about all the features of Compose
 | 
	
		
			
				|  |  | +see [the list of features](#features)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Compose is great for development environments, staging servers, and CI. We don't
 | 
	
		
			
				|  |  | -recommend that you use it in production yet.
 | 
	
		
			
				|  |  | +Compose is great for development, testing, and staging environments, as well as
 | 
	
		
			
				|  |  | +CI workflows. You can learn more about each case in
 | 
	
		
			
				|  |  | +[Common Use Cases](#common-use-cases).
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Using Compose is basically a three-step process.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  1. Define your app's environment with a `Dockerfile` so it can be
 | 
	
		
			
				|  |  |  reproduced anywhere.
 | 
	
		
			
				|  |  |  2. Define the services that make up your app in `docker-compose.yml` so
 | 
	
		
			
				|  |  | -they can be run together in an isolated environment:
 | 
	
		
			
				|  |  | +they can be run together in an isolated environment.
 | 
	
		
			
				|  |  |  3. Lastly, run `docker-compose up` and Compose will start and run your entire app.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  A `docker-compose.yml` looks like this:
 | 
	
	
		
			
				|  | @@ -40,6 +42,9 @@ A `docker-compose.yml` looks like this:
 | 
	
		
			
				|  |  |      redis:
 | 
	
		
			
				|  |  |        image: redis
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +For more information about the Compose file, see the
 | 
	
		
			
				|  |  | +[Compose file reference](yml.md)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Compose has commands for managing the whole lifecycle of your application:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   * Start, stop and rebuild services
 | 
	
	
		
			
				|  | @@ -57,11 +62,84 @@ Compose has commands for managing the whole lifecycle of your application:
 | 
	
		
			
				|  |  |  - [Command line reference](./reference/index.md)
 | 
	
		
			
				|  |  |  - [Compose file reference](compose-file.md)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +## Features
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#### Preserve volume data
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose preserves all volumes used by your services. When `docker-compose up`
 | 
	
		
			
				|  |  | +runs, if it finds any containers from previous runs, it copies the volumes from
 | 
	
		
			
				|  |  | +the old container to the new container. This process ensures that any data
 | 
	
		
			
				|  |  | +you've created in volumes isn't lost.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#### Only recreate containers that have changed
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose caches the configuration used to create a container. When you
 | 
	
		
			
				|  |  | +restart a service that has not changed, Compose re-uses the existing
 | 
	
		
			
				|  |  | +containers. Re-using containers means that you can make changes to your
 | 
	
		
			
				|  |  | +environment very quickly.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#### Variables and moving a composition to different environments
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +> New in `docker-compose` 1.5
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose supports variables in the Compose file. You can use these variables
 | 
	
		
			
				|  |  | +to customize your composition for different environments, or different users.
 | 
	
		
			
				|  |  | +See [Variable substitution](compose-file.md#variable-substitution) for more
 | 
	
		
			
				|  |  | +details.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose files can also be extended from other files using the `extends`
 | 
	
		
			
				|  |  | +field in a compose file, or by using multiple files. See [extends](extends.md)
 | 
	
		
			
				|  |  | +for more details.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +## Common Use Cases
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose can be used in many different ways. Some common use cases are outlined
 | 
	
		
			
				|  |  | +below.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +### Development environments
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +When you're developing software it is often helpful to be able to run the
 | 
	
		
			
				|  |  | +application and interact with it. If the application has any service dependencies
 | 
	
		
			
				|  |  | +(databases, queues, caches, web services, etc) you need a way to document the
 | 
	
		
			
				|  |  | +dependencies, configuration and operation of each. Compose provides a convenient
 | 
	
		
			
				|  |  | +format for definition these dependencies (the [Compose file](yml.md)) and a CLI
 | 
	
		
			
				|  |  | +tool for starting an isolated environment. Compose can replace a multi-page
 | 
	
		
			
				|  |  | +"developer getting started guide" with a single machine readable configuration
 | 
	
		
			
				|  |  | +file and a single command `docker-compose up`.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +### Automated testing environments
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +An important part of any Continuous Deployment or Continuous Integration process
 | 
	
		
			
				|  |  | +is the automated test suite. Automated end-to-end testing requires an
 | 
	
		
			
				|  |  | +environment in which to run tests. Compose provides a convenient way to create
 | 
	
		
			
				|  |  | +and destroy isolated testing environments for your test suite. By defining the full
 | 
	
		
			
				|  |  | +environment in a [Compose file](yml.md) you can create and destroy these
 | 
	
		
			
				|  |  | +environments in just a few commands:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $ docker-compose up -d
 | 
	
		
			
				|  |  | +    $ ./run_tests
 | 
	
		
			
				|  |  | +    $ docker-compose stop
 | 
	
		
			
				|  |  | +    $ docker-compose rm -f
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +### Single host deployments
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Compose has traditionally been focused on development and testing workflows,
 | 
	
		
			
				|  |  | +but with each release we're making progress on more production-oriented features.
 | 
	
		
			
				|  |  | +Compose can be used to deploy to a remote docker engine, for example a cloud
 | 
	
		
			
				|  |  | +instance provisioned with [Docker Machine](https://docs.docker.com/machine/) or
 | 
	
		
			
				|  |  | +a [Docker Swarm](https://docs.docker.com/swarm/) cluster.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +See [compose in production](production.md) for more details.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ## Release Notes
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  To see a detailed list of changes for past and current releases of Docker
 | 
	
		
			
				|  |  | -Compose, please refer to the [CHANGELOG](https://github.com/docker/compose/blob/master/CHANGELOG.md).
 | 
	
		
			
				|  |  | +Compose, please refer to the
 | 
	
		
			
				|  |  | +[CHANGELOG](https://github.com/docker/compose/blob/master/CHANGELOG.md).
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ## Getting help
 | 
	
		
			
				|  |  |  
 |