¿Y si queremos orquestar varios contenedores Docker? Microservicios, Docker Compose, Yaml… ¡Qué jaleo! (2/2)

Siguiendo con la primera parte del post, en la que hablé de todas las herramientas que nos proporciona el ecosistema de Docker, y en la que una de ellas en concreto, Docker Compose es la herramienta que te permite orquestar múltiples contenedores.
En este post, os voy a hablar sobre el archivo Yaml de Docker Compose que como os adelanté en la primera parte, es el descriptor de fichero que nos permite orquestar múltiples contenedores.
Asi que… allá vamos.

¿Qué es eso de Yaml?¿Y qué pinta en todo esto?

YAML es un acrónimo recursivo que significa «YAML Ain’t Another Markup Language» (traducido significa «YAML no es otro lenguaje de marcado»), aunque a comienzos de su desarrollo, YAML significaba «Yet Another Markup Language» (puedes leer más sobre esto aquí).
Según el sitio web oficial de YAML, YAML es «un estándar para serializar datos en cualquier lenguaje de programación y con un formato fácil de leer por parte de las personas».
Yaml está basado en lenguajes como XML, C, Python, Perl. YAML fue propuesto por Clark Evans en 2001, quien lo diseñó junto a Ingy döt Net y Oren Ben-Kiki.
Es usado para archivos de configuración (como vamos a ver a continuación), depuración u otros fines en los que la facilidad de lectura juegan un rol importante.

El descriptor de contenedores Yaml. Orquestando Dockers con Docker Compose

Docker Compose utiliza un archivo compose.yml para configurar los servicios de una aplicación (recordar, una aplicación distribuida). Luego, utilizando un solo comando ($docker-compose up), se crea e inicia todos los servicios de su configuración. Ese archivo compose.yml es el descriptor de los contenedores.
En este archivo Yaml especificamos los diferentes contenedores y sus propiedades, como imágenes, links, volúmenes, etc., básicamente podemos indicar las mismas propiedades que indicamos arrancando los contenedores individualmente con el comando $docker run.
Como se cuenta en la documentación oficial de Docker, el uso de Docker Compose es básicamente un proceso de tres pasos:
1 – Definir el entorno de la aplicación con un Dockerfile para que pueda ser ejecutado en cualquier lugar.
2 – Definir los servicios que constituyen la aplicación en el archivo docker-compose.yml pudiendo así ejecutar todos los servicios juntos en un entorno aislado.
3 – Por último, ejecutar $docker-compose up para iniciar y ejecutar toda la aplicación.
En el siguiente ejemplo vemos varios contenedores: un contenedor para la base de datos postgresql, un contenedor para la aplicación (en Java) usando tomcat enlazado con el contenedor de postgresq.
Captura de pantalla 2015-11-22 a las 22.41.16
Describiendo un poco las propiedades que se pueden usar, tenemos la imagen de los contenedores que se indica con la propiedad image, los contenedores de datos con la propiedad volumes, con volumes_from podemos usar volúmenes, con links enlazar contenedores, con environment se añade varibales de entorno y con ports se puede asociar puertos entre host y  contenedores (en el ejemplo se ha usado los puertos por defecto de cada uno de los servicios) o solo los contenedores eligiéndose un puerto host aleatoriamente.
A parte de los que puedes ver en la imagen, hay más propiedades como external_links, labels, net, pid… y muchos más.
Puedes ver mejor la descripción completa del formato del archivo de Docker Compose en la página oficial, para hacerte una idea de las opciones que podemos usar, está bien explicado y con ejemplos que resultan sencillos entender conociendo los Dockerfile con $docker run.

Terminando…

Para acabar, os dejo aquí una imagen que resume gráficamente todo esto que os he contado en estos dos post.
Captura de pantalla 2015-11-22 a las 23.12.30

Javier Garzás

Deja un comentario

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

Ir arriba