Docker Compose es una herramienta que puede usar para administrar de forma centralizada las implementaciones de muchos contenedores Docker diferentes. Es una herramienta importante para cualquier aplicación que necesite múltiples microservicios, ya que permite que cada servicio esté fácilmente en un contenedor administrado por separado.
¿Qué hace Docker Compose?
Los contenedores Docker se utilizan para ejecutar aplicaciones en un entorno aislado. Es bastante común hoy en día ver implementaciones de aplicaciones realizadas en Docker por los numerosos beneficios que brinda. Sin embargo, a menudo no es tan simple como ejecutar un solo contenedor. Por lo general, es posible que tenga muchos contenedores que se unen para actuar como un servicio cohesivo formado por muchas partes móviles.
Administrar todo esto en el momento de la implementación es complicado, por lo que para limpiarlo, Docker proporciona Docker Compose, una herramienta de configuración que se utiliza para ejecutar varios contenedores a la vez. Puede definir toda la configuración en un archivo YAML y luego iniciar todos los contenedores con un comando.
En lugar de tener todos sus servicios en un gran contenedor, Docker Compose le permite dividirlos en contenedores manejables individualmente. Esto es mejor tanto para la construcción como para la implementación, ya que puede administrarlos todos en bases de código separadas y no necesita iniciar manualmente cada contenedor individual.
El uso de Docker Compose es un proceso de tres pasos:
- Cree las imágenes de los componentes utilizando sus Dockerfiles o extráigalos de un registro.
- Defina todos los servicios de componentes en un
docker-compose.yml
archivo. - Ejecutarlos todos juntos usando
docker-compose
CLI.
Docker Compose no es otro tipo de Dockerfile. Aún deberá compilar y publicar sus contenedores Docker mediante un Dockerfile. Pero, en lugar de ejecutarlos directamente, puede usar Docker Compose para administrar la configuración de una implementación de varios contenedores.
¿Cómo se usa Docker Compose?
La configuración de un archivo docker compose se realiza en docker-compose.yml
. No necesita colocar esto en la raíz de su proyecto como un Dockerfile. De hecho, puede ir a cualquier parte, ya que no depende de ningún otro código. Sin embargo, si está compilando las imágenes localmente, deberá ir a una carpeta de proyecto con el código que se está compilando.
Un archivo de configuración de Compose se parecerá a lo siguiente. Esta configuración ejecuta una instancia de WordPress usando wordpress
contenedor fuera del Docker Hub. Sin embargo, esto depende de una base de datos MySQL, que también crea Compose.
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpasswordchangeme MYSQL_DATABASE: wordpress MYSQL_USER: usernamechangeme MYSQL_PASSWORD: passwordchangeme wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: usernamechangeme WORDPRESS_DB_PASSWORD: passwordchangeme volumes: db_data:
Echemos un vistazo al formato de este archivo. Primero, un número de versión, ya que la sintaxis puede cambiar dependiendo de la versión que estés usando.
A continuación una lista de Servicios. El primero se llama "db" y usa el mysql:5.7
contenedor, configurado para reiniciar siempre, y con variables de entorno para configurar la base de datos con un usuario y una contraseña. Para mantener los datos durante los reinicios, esta imagen se configura con un volumen de Docker montado en el directorio de datos de MySQL.
El otro servicio es "wordpress", que depende del servicio de la base de datos, lo que garantiza que Docker se asegurará de que la base de datos se inicie antes de ejecutarse. Expone el puerto 80 como puerto 8000 y establece algunas variables de entorno para que pueda conectarse a MySQL. Tenga en cuenta que el host de la base de datos se establece en db:3306
, que le dice al contenedor de WordPress que se conecte al servicio "db".
Por último, los volúmenes se definen para el almacenamiento persistente. Opcionalmente, también puede definir redes personalizadas para los contenedores. Hay muchas opciones extendidas que puede configurar, por lo que si está buscando hacer algo específico, debe consultar la documentación de Docker Compose.
Una vez configurado, iniciar este servicio es fácil. Simplemente ejecute docker-compose up
, que extraerá todos los contenedores necesarios e iniciará sus servicios.
docker-compose up -d
Y debería ver los servicios ejecutándose en el sistema con docker ps
. En este caso, verá que WordPress funciona correctamente.
RELACIONADO: Cómo instalar Docker y Docker Compose en Linux
Construcción con Docker Compose
Docker Compose también se puede usar dentro de un proyecto de Dockerfile y se puede configurar para compilar y ejecutar una imagen localmente en lugar de extraerla de Docker Hub.
Para hacerlo, simplemente necesita agregar un build
sección sobre el servicio. Puede configurar diferentes directorios de contexto, así como diferentes Dockerfiles para diferentes imágenes.
version: "3.8" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate image: imagename:tag
En este caso, la image:
La variable también está configurada, pero aquí se usa para etiquetar la imagen creada por Docker Compose.