===== 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 [[https://es.wikipedia.org/wiki/YAML|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.
Para pasar un script de docker al formato de docker compose se puede usar la herramienta: [[https://it-tools.tech/docker-run-to-docker-compose-converter]]
==== 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"