How to Configure Docker Compose for Multi-Container Applications
Step 1: Install Docker and Docker Compose
- Install Docker:
- Update your package list:
sudo apt-get update
- Install Docker with the following command:
sudo apt-get install docker.io
- Start Docker and enable it to launch at boot:
sudo systemctl start docker sudo systemctl enable docker
- Verify the installation:
docker --version
- Update your package list:
- Install Docker Compose:
- Download the latest version of Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Make Docker Compose executable:
sudo chmod +x /usr/local/bin/docker-compose
- Verify the installation:
docker-compose --version
- Download the latest version of Docker Compose:
Step 2: Create a Docker Compose Configuration File
- Create a
docker-compose.yml
file in your project directory:nano docker-compose.yml
- Define your services (containers) in the YAML file. Here’s a basic example with two containers (a web server and a database):
version: '3' services: web: image: nginx ports: - "80:80" db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example
- This configuration sets up an Nginx web server and a MySQL database.
- The
web
container listens on port 80 and thedb
container uses a password for the root user.
Step 3: Start the Multi-Container Application
- Run the following command to start the services defined in your
docker-compose.yml
file:docker-compose up -d
- The
-d
flag runs the containers in detached mode (in the background). - Docker Compose will automatically download the required images and create containers as defined.
- The
Step 4: Verify the Running Containers
- Check the status of the containers:
docker-compose ps
- This will show you the list of running containers along with their respective status and port mappings.
- You can also check logs for any issues:
docker-compose logs
Step 5: Interact with Containers
- You can access a running container using the following command:
docker exec -it <container_name> /bin/bash
- Replace
<container_name>
with the name of your container (e.g.,web
ordb
). - This will open a shell session inside the container, allowing you to interact with it directly.
- Replace
Step 6: Scaling the Application
- Docker Compose allows you to scale services horizontally. For example, to run multiple instances of the web server:
docker-compose up -d --scale web=3
- This command will create 3 instances of the
web
service (Nginx).
- This command will create 3 instances of the
- Verify the scaling:
docker-compose ps
Step 7: Updating the Application
- If you need to update your containers (e.g., update the image or change configurations), modify the
docker-compose.yml
file and run:docker-compose up -d
- Docker Compose will automatically apply the changes to the running containers.
Step 8: Stopping and Removing Containers
- To stop the running containers, use:
docker-compose down
- This will stop and remove all the containers, networks, and volumes defined in your
docker-compose.yml
file.
- This will stop and remove all the containers, networks, and volumes defined in your
Step 9: Clean Up Resources
- If you want to remove containers, networks, and volumes completely, run:
docker-compose down --volumes --remove-orphans
- This will also remove any unused volumes and orphaned containers.
Step 10: Automating Docker Compose with Systemd (Optional)
- For automatic startup of your application when the server reboots, you can create a systemd service file:
- Create a new service file:
sudo nano /etc/systemd/system/docker-compose-app.service
- Add the following content to it:
[Unit] Description=Docker Compose Application After=docker.service Requires=docker.service [Service] WorkingDirectory=/path/to/your/project ExecStart=/usr/local/bin/docker-compose up ExecStop=/usr/local/bin/docker-compose down Restart=always [Install] WantedBy=multi-user.target
- Enable and start the service:
sudo systemctl enable docker-compose-app sudo systemctl start docker-compose-app
- Create a new service file:
This guide will assist your customers in setting up and managing multi-container applications using Docker Compose, making it easy to deploy and scale applications on their dedicated server.