Orquestando contenedores docker con docker-compose

Uno de los puntos de partida de los contenedores docker es su utilización con microservicios, por tanto debemos definir nuestros contenedores para formar un stack, esto es común cuando tenemos aplicaciones distribuidas, es decir, diversos componentes ejecutándose en entornos separados.

El ecosistema de docker cuenta con varias herramientas, una de ellas es docker-compose con esta podremos definir en un fichero yaml los diversos contenedores para realizar un despliegue de aplicaciones.

Para instalar el docker-compose puede seguir las indicaciones en Instalación de Docker Compose

Recordar, la idea es definir los contenedores es para que cada uno de ellos atienda un servicio específico.

Aquí mostramos un fichero docker-compose.yml, lo llamamos así porque es el nombre por defecto que docker-compose utiliza para leer y crear el stack:

wordpress:
image: wordpress
links:
- db:mysql
ports:
- 8080:80

db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass

Nuestro stack esta compuesto por 2 contenedores, uno de ellos parte de una imagen de wordpress y el otro de mysql, este caso separa el servidor apache con el código y la base de datos. Los parámetros que utiliza son similares a los utilizados al crear ejecutar contenedores con el comando docker run.

Bien, el primer contenedor se denomina wordpress, su primer parámetro image indica que imagen utilizaremos para el contenedor, en este caso es un wordpress, que será descargada del hub de docker si no la tenemos en el equipo, el parámetro links indica con que otros contenedores del stack se relacionará, en este ejemplo, con el definido como db pero que internamente se utilizará bajo el alias mysql y por último el parámetro ports le indica que el contenedor escuchará el puerto 8080 pero que internamente lo tratará como 80.

Hemos dicho que el contenedor wordpress se relaciona con el contenedor definido como db, este contenedor es de una imagen mysql, y define la variable de entorno MYSQL_ROOT_PASSWORD con el valor rootpass, lo que hace es que al crear el contenedor de mysql le pondrá dicha clave al usuario root.

Una vez definido nuestro stack, tenemos podremos levantar los contenedores utilizando:

$ docker-compose up

Al ser ejecutado por primera vez, descargará las imágenes si no las tuviera, creará los contenedores y los ejecutará, el orden de ejecución se configura teniendo en cuenta las relaciones entre contenedores. Al ir ejecutándose los contenedores veremos en pantalla los logs que cada una de los contenedores va generando y el sistema se queda esperando más logs. Si quisiera que se ejecuten en backgroud agregar el parámetro -d, tal como:

$ docker-compose up -d

Recordar, esto mismo se puedo haber hecho ejecutando uno a uno con “docker run”, pero para el despliegue de aplicaciones distribuidas es mejor orquestar definiéndolas en ficheros yaml y usar docker-compose.

Hablando de ficheros yaml, si quisiera ejecutar un despliegue desde un fichero yaml con un nombre diferente al de por defecto, por ejemplo docker-compose-dev.yml, utilice el parámetro -f, tal como:

$ docker-compose -f docker-compose-dev.yml up

Una vez sus contenedores estén ejecutándose, puede ver el estado de su stack con:

$ docker-compose ps
Name Command State Ports
wordpress_db_1 /entrypoint.sh mysqld Up 3306/tcp
wordpress_wordpress_1 /entrypoint.sh apache2-for ... Up 0.0.0.0:8080->80/tcp

Puede ir a su navegador e ir a:

http://localhost:8080/

y le aparecerá el instalador de wordpress.

Para detener su stack, basta con:

$ docker-compose stop

Y si lo quiere volver a arrancar:

$ docker-compose start

Si quiere ver los logs de un solo contenedor, por ejemplo el de wordpress:

$ docker-compose logs wordpresss

Y si quiere ver de todos, no indique el contenedor:

$ docker-compose logs

Para eliminar los contenedores del stack use:

$ docker-compose kill

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *