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, puesto que posibilita que cada servicio esté fácilmente en un contenedor administrado de forma separada.
¿Qué hace Docker Compose?
Los contenedores Docker se usan para ejecutar aplicaciones en un entorno aislado. En la actualidad es bastante común ver implementaciones de aplicaciones hechas en Docker por los numerosos beneficios que brinda. A pesar de esto, a menudo no es tan simple como ejecutar un solo contenedor. Por lo general, es factible que tenga muchos contenedores que se unen para actuar como un servicio cohesivo compuesto 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 al mismo tiempo. Puede establecer toda la configuración en un archivo YAML y después iniciar todos los contenedores con un comando.
En lugar de tener todos sus servicios en un gran contenedor, Docker Compose le posibilita dividirlos en contenedores administrables individualmente. Esto es mejor para la construcción y la implementación, puesto que puede administrarlos todos en bases de código separadas y no es necesario iniciar manualmente cada contenedor individual.
El uso de Docker Compose es un procedimiento de tres pasos:
- Cree las imágenes de los componentes usando sus Dockerfiles o extráigalas de un registro.
- Establecer todos los servicios de componentes en un
docker-compose.yml
expediente. - Ejecútelos todos juntos usando el
docker-compose
CLI.
Docker Compose no es otro tipo de Dockerfile. Aún necesitará crear y publicar sus contenedores Docker usando un Dockerfile. Pero, en lugar de ejecutarlos de forma directa, puede utilizar Docker Compose para administrar la configuración de una implementación de varios contenedores.
¿Cómo se utiliza Docker Compose?
La configuración de un archivo de composición de Docker se realiza en docker-compose.yml
. No necesita colocar esto en la raíz de su proyecto como un Dockerfile. En realidad, puede ir a cualquier parte, puesto que no depende de ningún otro código. A pesar de esto, si está compilando las imágenes localmente, deberá ir en una carpeta de proyecto con el código que se está compilando.
Un archivo de configuración de Redactar tendrá un aspecto equivalente al siguiente. Esta configuración ejecuta una instancia de WordPress usando el wordpress
contenedor del Docker Hub. A pesar de esto, esto depende de una base de datos MySQL, que además es creada por Docker 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, puesto 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 utiliza la mysql:5.7
contenedor, configurado para reiniciar siempre, y con variables de entorno para configurar la base de datos con un usuario y contraseña. Para mantener los datos en 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 está configurado en db:3306
, que le dice al contenedor de WordPress que se conecte al servicio «db».
Por último, los volúmenes se definen para almacenamiento persistente. Opcionalmente, puede también 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 para Docker Compose.
Una vez configurado, iniciar este servicio es fácil. Simplemente corre docker-compose up
, que extraerá todos los contenedores necesarios e iniciará sus servicios.
docker-compose up -d
Y debería ver los servicios que se ejecutan en el sistema con docker ps
. Para este caso, verá WordPress funcionando correctamente.
RELACIONADO: Cómo instalar Docker y Docker Compose en Linux
Compilación con Docker Compose
Docker Compose además se puede utilizar 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
Para este caso, el image:
La variable además está configurada, pero aquí se utiliza para etiquetar la imagen creada por Docker Compose.