Files
my-docs/Containerization & Orchestration/Docker/4-Docker-Compose.md
2024-10-28 22:42:27 +03:30

84 lines
3.6 KiB
Markdown
Executable File

# **Docker Compose Guide**
Docker Compose is a tool for defining and running multi-container Docker applications. It allows you to manage services, networks, and volumes using a YAML configuration file.
---
## **1. Basic Docker Compose Structure**
Before defining the services in Docker Compose, we need to specify the Docker Compose version and the services we want to run. Here's a basic YAML template:
```yaml
version: "<python-version>"
services:
<service-name>: # The name of your service (e.g., web, db)
container_name: <container-name> # The name of the container
image: <image-name> # Docker image to be used for this service
restart: always # Ensure the container restarts if it stops or fails
ports:
- "<sv-port>:<container-port>" # Map the host port to the container port
volumes:
- <vol-name>:<container-loc> # Attach a volume to a specific location in the container
environment:
- <env1>=<value1> # Environment variables to be passed to the container
```
### **Explanation**:
- **`services:`**: The core section where you define different services (containers) that make up your application.
- **`<service-name>`**: Replace with the name of the service (e.g., `web`, `database`). Each service corresponds to a container.
- **`container_name`**: The name given to the container.
- **`image`**: The Docker image used to run the service (e.g., `python:3.9`, `nginx`).
- **`restart: always`**: Ensures the container will always restart if it stops, providing higher availability.
- **`ports`**: Maps ports from the host to the container, allowing the container to be accessed externally. The syntax is `<host-port>:<container-port>`.
- **`volumes`**: Links a Docker volume or host directory to a directory inside the container, enabling persistent data or sharing of resources. Example: `myvolume:/usr/src/app`.
- **`environment`**: Defines environment variables to be passed to the container at runtime. For example, setting an environment variable like `DB_HOST=localhost`.
---
## **2. Defining Volumes**
Docker Compose allows you to define persistent volumes that can be attached to containers. Here's how to define a volume:
```yaml
volumes:
<vol-name>: # Define the volume here
```
### **Explanation**:
- **`volumes:`**: This section allows you to define named volumes that can be used in the services.
- **`<vol-name>`**: Replace this with the name of the volume (e.g., `data-volume`, `db-volume`). The volume can be attached to different services to persist data beyond the container's lifecycle.
---
## **3. Useful Docker Compose Commands**
### **3.1 Start the Docker Compose Application**
To bring up the application defined in the `docker-compose.yml` file, use:
```bash
docker compose up
```
### **3.2 Run Docker Compose in Detached Mode (Background)**
To run your Docker Compose services in the background (detached mode):
```bash
docker compose up -d
```
### **3.3 Stop and Remove Docker Compose Services**
To stop the services and remove the containers, networks, and volumes created by Docker Compose:
```bash
docker compose down
```
### **Explanation of Commands**:
- **`docker compose up`**: Builds, (re)creates, and starts all services defined in the `docker-compose.yml` file.
- **`docker compose up -d`**: Runs the services in the background, keeping your terminal free while the containers continue running.
- **`docker compose down`**: Stops and removes all running services, containers, and networks created by Docker Compose. You can add the `-v` flag to remove volumes as well.