Una introducción práctica a Docker Compose

Los contenedores Docker abrieron un mundo de posibilidades para la comunidad tecnológica, las molestias para configurar un nuevo software se redujeron a diferencia de los viejos tiempos cuando un desorden debía ser resuelto por un formato grave, redujo el tiempo para configurar y usar un nuevo software que finalmente jugó Es importante que los técnicos aprendan cosas nuevas, extiéndalo en un contenedor y deséchelo cuando termine. Las cosas se volvieron fáciles, y lo mejor que es el código abierto que todos pueden usar, viene con una pequeña curva de aprendizaje.

Entre la miríada de posibilidades estaba la posibilidad de implementar pilas de tecnología complejas para nuestras aplicaciones, que anteriormente habrían sido del dominio de los expertos. Hoy en día, con la ayuda de contenedores, los ingenieros de software con un conocimiento sólido de los sistemas subyacentes pueden implementar una pila compleja y, por qué no es la necesidad del momento, la figura retórica "Jack of all trades" obtuvo una elegante actualización; “Maestro de algunos” basado en las necesidades de la época. En pocas palabras, habilidades en forma de "T".

La posibilidad de definir una pila compleja en un archivo y ejecutarla con un solo comando, es bastante tentadora eh. Los chicos de Docker Inc. eligen llamarlo Docker compose.

En este artículo, usaremos la aplicación de votación de ejemplo de Docker y la implementaremos usando Docker compose.

Docker Compose

En palabras de Docker Inc.

Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Con Compose, usa un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración.

La aplicación de votación

Presentamos la aplicación de demostración más favorita de la comunidad de Docker, "The Voting App", como si necesitara una presentación. Se trata de una aplicación sencilla basada en la arquitectura de microservicios, que consta de 5 servicios sencillos.

  1. Voting-App : Frontend de la aplicación escrita en Python, utilizada por los usuarios para emitir sus votos.
  2. Redis : base de datos en memoria, utilizada como almacenamiento intermedio.
  3. Trabajador : servicio .Net, utilizado para obtener votos de Redis y almacenarlos en la base de datos de Postres.
  4. DB : Base de datos PostgreSQL, utilizada como base de datos.
  5. Result-App : Frontend de la aplicación escrita en Node.js, muestra los resultados de la votación.

El repositorio de votación tiene un archivo llamado docker-compose.ymleste archivo que contiene la configuración para crear los contenedores, exponer puertos, vincular volúmenes y conectar contenedores a través de las redes necesarias para que la aplicación de votación funcione. Suena como un montón de comandos bastante largos docker runy docker network create, de lo contrario, docker compose nos permite poner todas esas cosas en un solo archivo docker-compose en formato yaml.

version: "3" services: vote: build: ./vote command: python app.py volumes: - ./vote:/app ports: - "5000:80" networks: - front-tier - back-tier result: build: ./result command: nodemon server.js volumes: - ./result:/app ports: - "5001:80" - "5858:5858" networks: - front-tier - back-tier worker: build: context: ./worker depends_on: - "redis" networks: - back-tier redis: image: redis:alpine container_name: redis ports: ["6379"] networks: - back-tier db: image: postgres:9.4 container_name: db volumes: - "db-data:/var/lib/postgresql/data" networks: - back-tier volumes: db-data: networks: front-tier: back-tier:

Git cloney cden el repositorio de la aplicación de votación.

dockersamples / example-vote-app

example-vote-app - Ejemplo de aplicación Docker Compose github.com

Tiempo de redacción

Con toda nuestra aplicación definida en un solo archivo de redacción, podemos tomar un suspiro de alivio, relajarnos y simplemente ejecutar la aplicación. La belleza de componer radica en el hecho de que un solo comando crea todos los servicios, conecta las redes (literalmente), monta todos los volúmenes y expone los puertos. Es hora de dar la bienvenida al upcomando, realiza todas las tareas mencionadas anteriormente. $ Docker-compose up

Después de muchos "Pull complete", cientos de megabytes y pocos minutos (tal vez más). . .

Listo, tenemos la aplicación de votación en funcionamiento.

El comando docker psenumera todos los contenedores en ejecución

$ docker ps -a --format="table {{.Names}}\t{{.Image}}\t{{.Ports}}" NAMES IMAGE PORTS voting_worker_1 voting_worker db postgres:9.4 5432/tcp voting_vote_1 voting_vote 0.0.0.0:5000->80/tcp voting_result_1 voting_result 0.0.0.0:5858->5858/tcp, 0.0.0.0:5001->80/tcp redis redis:alpine 0.0.0.0:32768->6379/tcp

El comando anterior muestra todos los contenedores en ejecución, las imágenes respectivas y los números de puerto expuestos.

Se puede acceder a la aplicación de votación en // localhost: 5000

Asimismo, se puede acceder a la aplicación de resultados de votación en // localhost: 5001

Cada voto emitido en la aplicación Voting se almacena primero en la base de datos en memoria de Redis, el servicio de trabajador .Net obtiene el voto y lo almacena en la base de datos de Postgres a la que accede la interfaz de Node.js.

Funciones de composición

Compose proporciona la flexibilidad de usar un nombre de proyecto para aislar los entornos entre sí, el nombre del proyecto es el nombre base del directorio que contiene el proyecto. En nuestra aplicación de votación, esto se indica con el nombre de los contenedores, voting_worker_1donde votingestá el nombre base del directorio. Podemos establecer un nombre de proyecto personalizado usando la -pbandera seguida del nombre personalizado.

Compose conserva todos los volúmenes utilizados por los servicios definidos en el archivo de composición, por lo que no se pierden datos cuando se recrean los contenedores con docker-compose up. Otra característica interesante es que solo se recrean los contenedores que han cambiado, los contenedores cuyo estado no cambió permanecen intactos.

Otra característica interesante es el soporte para variables en el archivo de composición, podemos definir variables en un .envarchivo y usarlas en el archivo docker-compose. Aquí el POSTGRES_VERSION=9.4puede definirse en el archivo de entorno o puede definirse en el shell. Se utiliza en el archivo de redacción de la siguiente manera:

db: image: "postgres:${POSTGRES_VERSION}"

Hoja de trucos de comando

Es muy fácil comenzar, detener y jugar con la composición.

$ docker-compose up -d $ docker-compose down $ docker-compose start $ docker-compose stop $ docker-compose build $ docker-compose logs -f db $ docker-compose scale db=4 $ docker-compose events $ docker-compose exec db bash

Resumen

Docker Compose es una gran herramienta para implementar y desechar contenedores rápidamente, el archivo de redacción puede ejecutarse sin problemas en cualquier máquina instalada con docker-compose. Las tecnologías de experimentación y aprendizaje están a solo un archivo de Compose de distancia;).

Espero que este artículo ayude a comprender Docker Compose. Me encantaría saber cómo usa Docker Compose en sus proyectos. Comparta el conocimiento, ayúdelo a llegar a más personas.