¡Esta es una revisión vieja del documento!
4.b Despliegue avanzado en Servidor: Docker Compose
Docker Compose es una herramienta que permite definir y administrar aplicaciones Docker de múltiples contenedores. Utiliza un archivo YAML para configurar los servicios, las redes y los volúmenes, facilitando la definición y el despliegue de aplicaciones complejas.
Estructura Básica de un archivo docker-compose.yml
Un archivo docker-compose.yml define la configuración de una aplicación multi-contenedor. Aquí se presentan las secciones principales:
services:
nombre_contenedor_1:
image: imagen_servicio1
restart: opciones si se reinicia el servidor
hostname: nombre del host
volumes:
- /ruta/host:/ruta/contenedor
ports:
- "puerto_host:puerto_contenedor"
environment:
- VARIABLE=valor
tty: true
stdin_open: true
pull_policy: never
nombre_contenedor_2:
# Configuración del segundo servicio
Comandos Básicos de Docker Compose
- Iniciar la aplicación basada en la configuración de
docker-compose.yml.
docker compose up -d
- Detener y eliminar los contenedores definidos en el archivo
docker-compose.yml.
docker compose down
- Muestra el estado de los contenedores definidos en el archivo docker-compose.yml.
docker compose ps
Ejemplo de Uso
Supongamos un archivo docker-compose.yml para una aplicación web con un servicio de frontend y otro de base de datos:
services:
peliculas_java:
image: temurin_peliculas
restart: always
hostname: peliculas_java
volumes:
- /opt/peliculas/target:/opt/app
ports:
- "80:8080"
peliculas_mysql:
image: mysql:8.3.0
restart: always
hostname: peliculas_java
environment:
- MYSQL_ROOT_PASSWORD=peliculas
- MYSQL_DATABASE=peliculas
- MYSQL_USER=peliculas
- MYSQL_PASSWORD=peliculas
Para iniciar esta aplicación, ejecutamos:
docker compose up -d
Esto levantará los contenedores de frontend y base de datos con la configuración especificada.
Docker Compose simplifica la gestión de aplicaciones Docker complejas, permitiendo definir y coordinar múltiples servicios con facilidad.
Compose build
Hemos visto que con docker compose up es como hacer un docker container run. Pues resulta que también podemos compilar las imágenes antes de levantar los contenedores con:
docker compose build --no-cache
Pero para ello hay que modificar el docker-compose.yml añadiendo el fichero Dockerfile a usar y la carpeta de donde podría copiar los ficheros.
services:
peliculas_java:
build:
context: .
dockerfile: Dockerfile.tienda-back
restart: always
hostname: peliculas_java
volumes:
- /opt/peliculas/target:/opt/app
ports:
- "80:8080"
