En esta entrada, la cual es continuación de nuestro manual de Docker, os enseñamos como montar vuestro propio entorno de producción con Docker Compose.
Tabla de contenidos
¿Qué es Docker Compose?
Docker compose es una herramienta creada por Docker, que permite crear un stack de contenedores intercomunicados, partiendo de distintas imágenes en un único equipo.
Como se ha comentado en entradas anteriores, Docker utiliza la tecnología de contenedores para desplegar imágenes. Estas imágenes suelen contener un servicio concreto, por ejemplo un sistema de bases de datos, un servidor web, un compilador específico etc. El gran problema que presenta este sistema es que, normalmente, vamos a necesitar de múltiples de estos servicios para poder hacer funcionar nuestro software. Un ejemplo de lo anterior es WordPress, el cual requiere de un servidor web con soporte para PHP y un sistema de bases de datos, para almacenar todos los datos de la página (usuarios, entradas, categorías, etc). La propuesta de Docker para resolver este tipo de configuraciones que requieren de servicios que están en diversas imágenes, es Docker Compose.
Ejemplo de uso de Docker Compose
Lo primero que debemos hacer es instalar esta tecnología, para ello lo mejor es que sigáis el propio manual de los creadores.
Para este ejemplo he decidido utilizar MyBB, un excelente sistema de foros que usábamos antiguamente en Somos Binarios, el cual viene junto con un servidor web en una imagen. Pero como requisito presenta la necesidad de tener que utilizar una base de datos, así que vamos a utilizar la imagen de MySQL. Si buscaís un ejemplo de WordPress podéis utilizar el de la documentación oficial.
Preparando el fichero de despliegue
Docker Compose se basa en un fichero con extensión yml donde vamos a indicar que imagen queremos desplegar, cómo se va a configurar y de qué depende. Todas aquellas dependencias se van a ejecutar con anterioridad, para así poder realizar una instalación correcta.
Esta es mi configuración de despliegue:
version: '2'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: foro
MYSQL_USER: pedro
MYSQL_PASSWORD: 1234
mybb:
depends_on:
- db
image: fbmac/mybb:latest
links:
- db
ports:
- "8000:80"
restart: always
Como podéis ver hay dos servicios:
- La base de datos, en este caso uso MySQL v5.7, le digo que me redirija el tráfico para poder acceder a la misma y además configuro algunos datos como las contraseñas o una primera base de datos.
- El foro, en este caso se usa MyBB (al no ser una imagen oficial, hay que poner el usuario que la hizo disponible “fbmac”), he indicado la dependencia y también he redirigido el tráfico.
Realizando el despliegue con Docker Compose
Para realizar el despliegue, lo único que hay que hacer es ejecutar el comando docker-compose up -d, desde la carpeta donde tenemos guardado el fichero yml.
Una vez que lo hacemos nos dirá que se ha creado db_1 y mybb_1, por ese orden.
Si usamos Kitematic, veremos lo siguiente:
Instalando MyBB
Una vez que ya tenemos todo listo, procedemos a realizar la instalación de MyBB mediante la interfaz web.
Lo primero que hacemos es indicar los datos de nuestra base de datos:
Ahora ya vemos que se ha conectado correctamente y se han creado las tablas necesarias:
Finalmente, conseguimos que MyBB quede instalado:
Docker compose vs Kubernetes
Una de las preguntas más planteadas, es ¿cuál es la diferencia entre docker compose y kubernetes?
- Docker compose sólo puede levantar contenedores en un equipo, mientras que kubernetes soporta entornos distribuidos
- Docker compose no admite réplicas de contenedores, mientras que kubernetes sí
- Docker compose no soporta el balanceo de carga entre contendores, kubernetes sí
- Docker compose no tiene una API de gestión del estado de los contenedores (healthcheck), kubernetes sí
En definitiva, Docker compose es una herramienta para trabajar con varios contenedores a la vez y Kubernetes es un orquestador, lo que implica que tiene todo lo que provee docker compose y otra multitud de herramientas y opciones.
Espero que os haya gustado la entrada.
Un saludo.
Un comentario en “Primeros pasos con Docker Compose”
GERMAN TELLEZ VANEGAS
Creo que hubiera sido un mejor aporte si explicas de donde salen los parametros del archivo yml y si necesitan identación o simples espacios