En aquest tema, explorarem com gestionar aplicacions que requereixen múltiples contenidors per funcionar. Això és especialment útil per a aplicacions complexes que necessiten diversos serveis, com bases de dades, servidors web, serveis de cache, etc. Utilitzarem Docker Compose per definir i gestionar aquests serveis de manera eficient.

Objectius d'aprenentatge

  • Entendre la necessitat d'aplicacions multi-contenidor.
  • Aprendre a definir múltiples serveis en un fitxer docker-compose.yml.
  • Gestionar la interacció entre diferents contenidors.
  • Executar i gestionar aplicacions multi-contenidor amb Docker Compose.

  1. Necessitat d'Aplicacions Multi-Contenidor

Conceptes Clau

  • Microserveis: Arquitectura on una aplicació es divideix en petits serveis independents.
  • Escalabilitat: Capacitat de gestionar més càrrega distribuint-la entre diversos contenidors.
  • Aïllament: Cada servei s'executa en el seu propi contenidor, evitant conflictes.

Exemples

  • Una aplicació web que utilitza un servidor web (Nginx), una base de dades (MySQL) i un servei de cache (Redis).

  1. Definint Múltiples Serveis en docker-compose.yml

Estructura Bàsica

El fitxer docker-compose.yml permet definir múltiples serveis. Aquí teniu un exemple bàsic:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
  cache:
    image: redis:latest

Explicació del Codi

  • version: Especifica la versió de Docker Compose.
  • services: Defineix els serveis que formen part de l'aplicació.
    • web: Servei que utilitza la imatge nginx:latest i exposa el port 80.
    • db: Servei que utilitza la imatge mysql:5.7 i defineix una variable d'entorn per a la contrasenya de root.
    • cache: Servei que utilitza la imatge redis:latest.

  1. Interacció entre Contenidors

Xarxes

Docker Compose crea una xarxa per defecte per a tots els serveis definits en el fitxer docker-compose.yml. Això permet que els serveis es comuniquin entre ells utilitzant els seus noms de servei com a hostnames.

Exemple

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db
      - cache
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
  cache:
    image: redis:latest

Explicació del Codi

  • depends_on: Assegura que els serveis db i cache s'iniciïn abans del servei web.

  1. Executant i Gestionant Aplicacions Multi-Contenidor

Comandes de Docker Compose

  • Iniciar serveis: docker-compose up
  • Aturar serveis: docker-compose down
  • Veure logs: docker-compose logs
  • Escalar serveis: docker-compose up --scale web=3

Exemple Pràctic

# Iniciar serveis
docker-compose up -d

# Veure logs
docker-compose logs -f

# Aturar serveis
docker-compose down

Exercicis Pràctics

Exercici 1: Crear una Aplicació Multi-Contenidor

  1. Crea un fitxer docker-compose.yml que defineixi un servei web (Nginx), una base de dades (PostgreSQL) i un servei de cache (Redis).
  2. Assegura't que el servei web depengui dels altres dos serveis.
  3. Inicia els serveis utilitzant Docker Compose.

Solució

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db
      - cache
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
  cache:
    image: redis:latest
# Iniciar serveis
docker-compose up -d

# Veure logs
docker-compose logs -f

# Aturar serveis
docker-compose down

Resum

En aquesta secció, hem après com definir i gestionar aplicacions multi-contenidor utilitzant Docker Compose. Hem vist com els serveis poden interactuar entre ells i com utilitzar comandes bàsiques de Docker Compose per gestionar aquests serveis. Amb aquests coneixements, estàs preparat per crear i gestionar aplicacions complexes que requereixen múltiples contenidors.

© Copyright 2024. Tots els drets reservats