===== 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"