Continuando con los post:
- Para los que empiezan: crear y ejecutar una imagen propia en un contenedor Docker (1/2)
- Para los que empiezan: crear y ejecutar una imagen propia en un contenedor Docker (2/2)
En los que os conté cómo crear y ejecutar imágenes, hoy, derivado de situaciones profesionales en las que lo he visto necesario, he querido escribir sobre cómo orquestar varios contenedores Docker.
¿Cuándo vamos a tener la necesidad de usar varios contenedores Docker? Bien pues, la respuesta es fácil, un ejemplo de usar múltiples contenedores es cuando tenemos aplicaciones distribuidas (ya sabes, una aplicación con distintos componentes que se ejecutan en entornos separados), y queremos desplegar estas aplicaciones distribuidas en cloud.
Para ello, existe como método los microservicios.
Cuando hablamos de microservicios hablamos de dividir los componentes de la aplicación de modo que el servicio que estamos dando es el resultado de la colaboración de pequeñas aplicaciones cuya función está diferenciada. Os dejo un post sobre microservicios
Docker pone a nuestra disposición Docker Compose, una de las muchas herramientas disponibles en el ecosistema de Docker. Docker Compose nos facilita la administración de aplicaciones compuestas por varios contenedores relacionados entre sí, definiendo en un archivo (yaml) los contenedores que forman parte de la aplicación.
Antes de seguir, es importante tener claro qué herramientas ofrece el ecosistema de Docker:
El Ecosistema de Docker
El ecosistema de Docker nos ofrece las siguientes herramientas (las puedes ver con más detalle en la documentación oficial de Docker):
- Docker: es un sistema de contenedores (aquí te dejo un post sobre Docker).
- Docker Hub: es el repositorio de imágenes. Algunas de estas imágenes son oficiales de Docker (como la imagen whalesay que usamos en este post), y otras creadas por usuarios que las comparten (como la imagen que creamos docker-whale a partir de la imagen whalesay, se puede ver en este post).
- Docker Compose: permite describir y orquestar mediante un fichero Yaml un conjunto de contenedores que se relacionan entre sí (heredero de Fig), facilitando así el despliegue de aplicaciones distribuidas.
- Docker Machine: permite construir máquinas virtuales para introducir contenedores. Similar a lo que hace Vagrant (te dejo un post donde se explica vagrant de manera sencilla). El objetivo de esta herramienta es facilitar el despliegue del motor de Docker a través de un solo comando en tu ordenador o en un proveedor de cloud como Amazon EC2.
- Decker Swarm: permite construir y gestionar un cluster de servidores Docker. Su interés reside en que con él podemos gestionar el cluster como una única máquina Docker.
En este post nos vamos a centrar en Docker Compose, vamos a ello.
Una introducción a Docker Compose
Con las aplicaciones distribuidas se pueden usar múltiples contenedores, cada uno de ellos con un servicio diferente, por ejemplo, uno de esos contenedores puede contener una base de datos como postgresql, Cassandra o MySQL, otro contenedor puede contener la aplicación en Java o en Ruby o en cualquier otro lenguaje y otro contenedor que contenga tomcat (veremos un ejemplo en la segunda parte).
Teniendo múltiples contenedores usar el comando $docker run para cada uno de ellos puede ser incómodo. Aquí es donde entra Docker Compose.
Con Docker Compose podemos definir y vincular cada uno de los contenedores que forman una aplicación multicontenedor (aplicación distribuida), y en vez de ejecutar cada contenedor individualmente mediante el comando $docker run, nos facilita un fichero yaml (veremos en la segunda parte del post qué es) que usando el comando $docker-compose up podemos iniciar todos los contenedores y en el orden que los especifiquemos en ese fichero yaml.
Este fichero del que hablo es un archivo descriptor (un fichero yaml, puedes ver aquí más información) de Docker Compose y nos sirve como ya os he comentado para definir, vincular e iniciar los contenedores en un entorno. En este fichero veremos información de la aplicación como imágenes, comandos, volúmenes, links, entre otras propiedades tienen.
Te dejo este enlace a la página oficial de Docker para saber más sobre ello y a la instalación de Docker Compose, y hasta aquí el post de hoy, en el siguiente entraré en más detalle sobre el archivo yaml para orquestar los diferentes contenedores Docker.
- Diario: cómo Javier Garzás evita quedarse obsoleto estudiando a un X10 con IA-Esteroides - 7 noviembre, 2024
- Si creas Historias de Usuario con IA ¿A quién pertenecen? ¿A ti o la IA? El mono Naruto te lo explica - 31 octubre, 2024
- HistorIAs de usuario y como a Maximiliano lo ENGAÑABAN con la IA y como una viejuna historia del 1500 le salvó - 24 octubre, 2024
Interesante línea de artículos estos sobre docker, porque es una herramienta que tiene un potencial enorme para facilitar el disponer de un entorno operativo a los equipos de desarrollo. Sin contar las posibilidades de trasladar esos contenedores a producción.
No hace ni una semana que subí un video con un ejemplo de un cluster de 3 Elasticsearch, un kibana y un logstash funcionando en docker con docker-compose.
Tema muy de moda este del docker.
https://www.youtube.com/watch?v=wBqZJ1QVtI8