En aquest tema, aprendrem com definir serveis a Docker Compose. Docker Compose és una eina que permet definir i executar aplicacions multi-contenidor. Utilitzant un fitxer YAML, pots especificar els serveis que componen la teva aplicació, les xarxes i els volums que necessiten.

  1. Introducció a Docker Compose

Docker Compose utilitza un fitxer YAML per definir els serveis, xarxes i volums necessaris per a una aplicació. Aquest fitxer es coneix com docker-compose.yml. A continuació, veurem com estructurar aquest fitxer per definir serveis.

  1. Estructura bàsica del fitxer docker-compose.yml

Un fitxer docker-compose.yml típic té la següent estructura:

version: '3'
services:
  servei1:
    image: imatge1
    ports:
      - "80:80"
  servei2:
    image: imatge2
    ports:
      - "8080:80"

Explicació del codi:

  • version: Especifica la versió del format de fitxer Compose. En aquest exemple, utilitzem la versió 3.
  • services: Defineix els serveis que componen l'aplicació.
    • servei1 i servei2: Són els noms dels serveis. Pots donar-los qualsevol nom que tingui sentit per a la teva aplicació.
    • image: Especifica la imatge Docker que s'utilitzarà per al servei.
    • ports: Defineix els ports que es mapegen entre el contenidor i la màquina host.

  1. Definint serveis amb més detalls

A més de les imatges i els ports, pots definir altres configuracions per als serveis, com ara volums, variables d'entorn, dependències, etc.

Exemple avançat:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - backend
  redis:
    image: redis:alpine
    networks:
      - backend

volumes:
  db_data:

networks:
  backend:

Explicació del codi:

  • web: Servei que utilitza la imatge nginx:latest.
    • volumes: Mapeja el directori local ./html al directori /usr/share/nginx/html dins del contenidor.
    • environment: Defineix variables d'entorn per al servei.
  • db: Servei que utilitza la imatge mysql:5.7.
    • environment: Defineix la contrasenya de l'usuari root de MySQL.
    • volumes: Mapeja el volum db_data al directori /var/lib/mysql dins del contenidor.
    • networks: Assigna el servei a la xarxa backend.
  • redis: Servei que utilitza la imatge redis:alpine.
    • networks: Assigna el servei a la xarxa backend.
  • volumes: Defineix el volum db_data.
  • networks: Defineix la xarxa backend.

  1. Exercici pràctic

Objectiu:

Crear un fitxer docker-compose.yml que defineixi una aplicació web amb un servei de base de dades.

Requisits:

  1. Un servei web que utilitzi la imatge nginx:latest.
  2. Un servei db que utilitzi la imatge mysql:5.7.
  3. El servei web ha de mapejar el port 80 de l'host al port 80 del contenidor.
  4. El servei db ha de tenir una variable d'entorn MYSQL_ROOT_PASSWORD amb el valor example.
  5. El servei db ha de mapejar un volum db_data al directori /var/lib/mysql dins del contenidor.

Solució:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

  1. Resum

En aquest tema, hem après com definir serveis a Docker Compose utilitzant un fitxer docker-compose.yml. Hem vist com especificar imatges, ports, volums, variables d'entorn i xarxes per als serveis. També hem practicat creant un fitxer docker-compose.yml per a una aplicació web amb un servei de base de dades.

En el següent tema, explorarem les comandes de Docker Compose per gestionar aquests serveis.

© Copyright 2024. Tots els drets reservats