CodeGym /Cursos /Docker SELF /Montaje de volúmenes y redes

Montaje de volúmenes y redes

Docker SELF
Nivel 16 , Lección 1
Disponible

7.1 Montaje de volúmenes

Montar volúmenes y redes en Docker Compose permite crear aplicaciones multicontenedor flexibles y eficientes. Los volúmenes (volumes) se usan para almacenar datos que deben conservarse fuera de los contenedores, mientras que las redes (networks) aseguran la interacción entre contenedores. En esta lección vamos a analizar en detalle cómo usar volúmenes y redes en Docker Compose.

Los volúmenes en Docker permiten guardar datos fuera de los contenedores, asegurando su disponibilidad incluso después de detener o eliminar los contenedores. Esto es especialmente útil para guardar datos de bases de datos, logs y otros datos que deben ser persistentes.

Tipos de volúmenes:

  • Volúmenes nombrados (Named Volumes): gestionados por Docker y guardados en un directorio especial en el host.
  • Montajes vinculados (Bind Mounts): montados en el contenedor desde un directorio específico en el host.

Definición de volúmenes en Docker Compose

Ejemplo de volúmenes nombrados

En este ejemplo se crea un volumen nombrado postgres-data, que se monta en el directorio /var/lib/postgresql/data dentro del contenedor db.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

Ejemplo de montajes vinculados

En este ejemplo, los directorios y archivos locales nginx.conf y html se montan en el contenedor web como montajes vinculados.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
<

7.2 Montaje de redes

Las redes en Docker Compose permiten que los contenedores interactúen entre sí. Cada contenedor puede estar conectado a una o más redes, lo que garantiza el aislamiento y la gestión del tráfico.

Tipos de redes:

  • Redes de puente (Bridge): por defecto, los contenedores se conectan a una red de puente, que proporciona su interacción dentro de un mismo host.
  • Redes superpuestas (Overlay): se utilizan para la interacción de contenedores ejecutados en diferentes hosts dentro de un clúster Docker Swarm.
  • Plugins de red (Network Plugins): permiten utilizar controladores de red externos para configuraciones más complejas.

Ejemplo de creación y uso de redes personalizadas

En este ejemplo, se crean dos redes personalizadas front-end y back-end. El servicio app está conectado a ambas redes, el servicio web solo a front-end, y el servicio db solo a back-end.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - front-end

  app:
    image: myapp:latest
    networks:
      - front-end
      - back-end

  db:
    image: postgres:latest
    networks:
      - back-end

networks:
  front-end:
  back-end:

Consejos prácticos:

  1. Uso de volúmenes con nombre: los volúmenes con nombre son gestionados por Docker y proporcionan facilidad de uso y gestión de datos. Los volúmenes con nombre se pueden conectar a varios servicios al mismo tiempo. Por ejemplo, un servicio de backend registra logs, mientras que un servicio de monitoreo los analiza y notifica si se detectan errores de nivel error.
  2. Separación de redes: el uso de múltiples redes permite aislar diferentes partes de la aplicación y controlar su interacción.
  3. Almacenamiento de archivos de configuración: utiliza volúmenes vinculados para montar archivos de configuración, lo que permite cambiar la configuración fácilmente sin necesidad de reconstruir las imágenes.
  4. Seguridad de redes: limita el acceso a las redes para que solo los contenedores necesarios puedan interactuar, aumentando así la seguridad de la aplicación.

7.3 Ejemplos de uso de volúmenes y redes

Ejemplos de uso de volúmenes y redes en Docker Compose:

Ejemplo 1: Aplicación con servidor web y base de datos

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

En este ejemplo:

  • El servidor web nginx y la base de datos PostgreSQL están conectados a una red llamada webnet, lo cual les permite interactuar. Si solo hay una red, no es necesario especificarla: se creará una red por defecto.
  • Los datos de la base de datos se almacenan en un volumen llamado db-data, lo que asegura su persistencia tras reiniciar los contenedores.

Ejemplo 2: Aplicación con múltiples capas

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier

  backend:
    image: mybackend:latest
    networks:
      - back-tier
    volumes:
      - backend-data:/var/lib/backend

  database:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - back-tier

volumes:
  backend-data:
  db-data:

networks:
  front-tier:
  back-tier:

En este ejemplo:

  • Se crean dos redes: front-tier y back-tier.
  • El servicio frontend está conectado a ambas redes, lo cual le permite interactuar tanto con backend como con clientes externos.
  • Los servicios backend y database están conectados solo a la red back-tier para garantizar su aislamiento e interacción.
  • Los datos de los servicios backend y database se almacenan en volúmenes separados llamados backend-data y db-data.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION