How to scale services using Docker Compose
Docker Compose tool is used to define and start running multi-container Docker applications. Configuration is as easy,there would be YAML file to configure your application’s services/networks/volumes etc., Then, with a single command, you can create and start all the services from the compose configuration.
Here are the key steps :
Dockerfilefor your app’s environment.
docker-compose.ymlfor the services that make up your app services.
docker-compose upand Compose starts and runs your entire app.
This quickstart assumes basic understanding of Docker concepts, please refer to earlier posts for understanding on Docker & how to install and containerize applications. In this post, we can look at how to use existing Docker compose file and scale services.
docker-compose.yml looks like this:
version: "2" services: redis-master: image: redis:latest ports: - "6379" redis-slave: image: gcr.io/google_samples/gb-redisslave:v1 ports: - "6379" environment:
- GET_HOSTS_FROM=dns frontend: image: gcr.io/google-samples/gb-frontend:v3 ports: - "80:80" environment: - GET_HOSTS_FROM=dns
Key Features of Docker Compose
- When you define the Compose file, you can use project name to isolate environments from each other. This could be useful in cases like creating multiple copies of a single environment or segregate the builds by a unique build number.
- Compose caches the configuration used to create a container. When you restart a service that has not changed, Compose re-uses the existing containers.It means that you can make changes to your environment very quickly.
- Compose preserves all volumes used by your services. When
docker-compose upruns, 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.
- Compose supports variables in the Compose file. You can use these variables to customize your composition for different environments or different users.
In the next section, we can look at how to use existing Docker compose file and scale services.
Scale service instances
Each service defined in Docker compose configuration can be scaled using below command
docker-compose scale <service name> = <no of instances>
For example :
Devops Engineer Masters Program will make you proficient in DevOps principles like CI/CD, Continuous Monitoring and Continuous Delivery, using tools like Puppet, Nagios, Chef, Docker, Git & Jenkins. It includes training on Linux, Python, Docker, AWS DevOps Certification Training and Splunk. The curriculum has been determined by extensive research on 5000+ job descriptions across the globe.
docker-compose scale redis-master=3
Although services can be scaled but you could get an arbitrary range of ports assigned since the ports are randomly assigned by the Docker engine. This can be controlled by assigning port range on the ports section of the compose YAML file.
services: redis-master: image: redis:latest ports: - "6379-6385:6379"
Scaling can also be done by using
up command as well with the
docker-compose up --scale redis-master=3 -d
Alternatively, in Compose file version 3.x, you can also specify replicas under the deploy section as part of a service configuration for Swarm mode.
Congrats! today we have learned how to scale services using scale command.
Like this post? Don’t forget to share it!
- Official documentation as a reference to understand any command.
- Docker build reference
- Docker run reference
- TOP 6 GUI tools for managing Docker environments
- Docker tutorial – Build Docker image for your Java application
- Using Docker Application Packages to Deliver Apps across Teams
- Best Practices article on writing Docker files.
- Test your knowledge on Dockerfile.