Estibador

Una guía para principiantes sobre Docker Compose

Una guía para principiantes sobre Docker Compose
Docker Compose es una de las herramientas más útiles para desarrolladores de software y administradores de sistemas. Muchos trabajos requieren a alguien con conocimientos de esta tecnología, por lo que Docker y Docker Compose están de moda en el espacio DevOps. Sin duda, saber cómo utilizar estas tecnologías beneficiará su carrera en TI.

Si es un principiante en Docker Compose, pero tiene algún conocimiento de Docker, este artículo es para usted. Aprenderás sobre:

Antes de sumergirnos en las partes jugosas de este artículo, un poco de información sobre la tecnología debería ser increíble.

La contenerización se ha convertido en una parte clave de la infraestructura de software, y esto se aplica a proyectos de gran, mediana o pequeña escala. Si bien los contenedores no son nuevos, Docker los ha hecho populares. Con los contenedores, los problemas de dependencia se convierten en cosa del pasado. Los contenedores también juegan un papel muy importante a la hora de hacer que la arquitectura de los microservicios sea muy eficaz. Las aplicaciones de software están compuestas por servicios más pequeños, por lo que es fácil tener estos servicios en contenedores y se comunican.

El problema de hacer esto es que habrá tantos contenedores en ejecución. Tal que gestionarlos se vuelve complejo. Esto crea la necesidad de una herramienta que ayude a ejecutar varios contenedores, lo que hace Docker Compose. Al final del artículo, comprenderá los conceptos básicos de Docker Compose y podrá usarlo también.

¿Qué es Docker Compose??

Sin toda la complejidad, Docker Compose es una herramienta que le permite administrar múltiples contenedores Docker. Recuerda los microservicios? El concepto de dividir una aplicación web en diferentes servicios? Bueno, esos servicios se ejecutarán en contenedores individuales que deben administrarse.

Imagina que una aplicación web tiene algunos de estos servicios:

Siguiendo una arquitectura similar a un microservicio, estos servicios se dividirán y ejecutarán en contenedores separados. Docker Compose facilita la administración de todos estos contenedores, en lugar de administrarlos individualmente. Es importante tener en cuenta que Docker Compose no crea explícitamente imágenes de Docker. El trabajo de crear imágenes lo realiza Docker a través del Dockerfile.

Comparaciones populares

Es común tener muchas soluciones a un problema. Docker Compose resuelve este problema de administrar múltiples contenedores. Como resultado, a menudo hay comparaciones con otras soluciones. Debe tener en cuenta que la mayoría de estas comparaciones son incorrectas. Si bien a menudo no son válidos, es mejor que los conozca, ya que le ayudará a comprender mejor Docker Compose.

Las dos comparaciones que se discutirán son:

Docker Compose frente a Kubernetes

Kubernetes a menudo se compara con Docker Compose. Pero, las similitudes en ambas herramientas son mínimas, con grandes diferencias. Estas tecnologías no están al mismo nivel o escala. Por lo tanto, comparar ambas herramientas es completamente incorrecto.

Kubernetes, conocido popularmente como k8s, es una herramienta de código abierto que se puede utilizar para automatizar contenedores (no se limita a Docker). Con k8s, puede implementar y administrar contenedores, asegurándose de que escalen a diferentes cargas. Kubernetes garantiza que los contenedores sean tolerantes a fallas y funcionen de manera óptima al hacer que se recuperen automáticamente, lo que no obtendrá de Docker Compose.

Kubernetes es una herramienta más poderosa. Es más adecuado para administrar contenedores para aplicaciones a gran escala en producción.

Docker Compose frente a Docker Swarm

Docker Compose también se compara a menudo con Docker Swarm, y es tan erróneo como la comparación de Kubernetes. En cambio, Docker Swarm debería ser el que se compare con Kubernetes.

Docker Swarm es una herramienta de código abierto que le permite realizar la orquestación de contenedores tal como lo haría con Kubernetes. Ambos tienen sus pros y sus contras, pero ese no es el tema de discusión. Le irá bien sabiendo que ambos son similares y ninguno es una alternativa a Docker Compose.

Instalación de Docker Compose

Docker Compose es una herramienta oficial de Docker, pero no viene con la instalación de Docker. Entonces, debe instalarlo como un paquete separado. El proceso de instalación de Docker Compose para Windows y Mac está disponible en el sitio oficial.

Para instalar Docker Compose en Ubuntu, puede usar el siguiente comando:

sudo apt-get install docker-compose

Para instalar Docker Compose en otras distribuciones de Linux, puede usar curl. Simplemente ejecute los siguientes comandos:

sudo curl -L
https: // github.com / docker / compose / releases / download / 1.18.0 / docker-compose-'uname
-s '-' uname -m '-o / usr / local / bin / docker-compose

Luego:

sudo chmod + x / usr / local / bin / docker-compose

El primer comando descarga la última versión de Docker Compose en el directorio dedicado a los paquetes. El segundo establece los permisos del archivo, haciéndolo ejecutable.

El Docker-Compose.Archivo yml

No será tan incorrecto decir que un archivo Docker Compose es para Docker Compose, lo que un Dockerfile es para Docker. Dentro del archivo de Docker Compose, se encuentran todas las instrucciones que Docker Compose sigue al administrar los contenedores. Aquí se definen los servicios que acaban siendo contenedores. También define las redes y los volúmenes de los que dependen los servicios.

El archivo Docker Compose usa la sintaxis YAML, y debe guardarlo como docker-compose.yml. Puede tener servicios para el backend, el frontend, la base de datos y las colas de mensajes en una aplicación web. Estos servicios necesitarán dependencias específicas. Dependencias como las redes, puertos, almacenamiento para un funcionamiento óptimo. Todo lo necesario para toda la aplicación se definirá en el archivo Docker Compose.

Necesita una comprensión básica de la sintaxis YAML para escribir su archivo de redacción. Si no está familiarizado con eso, debería tomar menos de una hora comprender. Habrá muchas directivas o pares clave-valor en su archivo. Los de nivel superior son:

Sin embargo, solo se discutirán la versión y los servicios, ya que puede definir los otros dos en la directiva de servicios.

Versión

Al escribir su archivo, primero definirá la versión. Al momento de escribir este artículo, Docker Compose solo tiene las versiones 1, 2 y 3. No es de extrañar que sea la versión recomendada para usar, ya que tiene ciertas diferencias con las versiones anteriores.

Puede especificar la versión que se utilizará para Docker Compose en el archivo como se muestra a continuación:

Servicios

La clave de servicio es posiblemente la clave más importante en un archivo de Docker Compose. Aquí, especifica los contenedores que desea crear. Hay muchas opciones y toneladas de combinaciones para configurar contenedores en esta sección del archivo. Estas son algunas opciones que puede definir en la clave de servicios:

En el resto de esta sección, aprenderá cómo cada una de estas opciones afecta a los contenedores.

Imagen

Esta opción define qué imagen utiliza el servicio. Utiliza la misma convención que usa al extraer una imagen de Dockerhub en un Dockerfile. He aquí un ejemplo:

imagen: postgres: último

Sin embargo, no hay ninguna restricción para usar solo archivos Dockerhub. También puede crear imágenes desde su máquina a través de su archivo Docker Compose, usando un Dockerfile. Puede utilizar las directivas "build", "context" y "dockerfile" para hacer esto.

He aquí un ejemplo:

construir:
contexto: .
dockerfile: Dockerfile

"Contexto" debe contener la ruta al directorio con el Dockerfile. Luego, "dockerfile" contiene el nombre del Dockerfile que se utilizará. Es convencional nombrar siempre sus Dockerfiles como "Dockerfile", pero esto le da la oportunidad de usar algo diferente. Debe tener en cuenta que esta no es la única forma de usar una imagen a través de un Dockerfile.

Nombre_contenedor

Docker asigna nombres aleatorios a los contenedores. Pero es posible que desee tener nombres personalizados para los contenedores. Con la clave "container_name", puede dar nombres específicos a los contenedores, en lugar de nombres generados aleatoriamente por Dockers.

He aquí un ejemplo:

nombre_contenedor: linuxhint-app

Sin embargo, hay una cosa con la que debe tener cuidado: no dé el mismo nombre a varios servicios. Los nombres de los contenedores deben ser únicos; si lo hace, los servicios fallarán.

Reanudar

La infraestructura de software está condenada al fracaso. Con el conocimiento de esto, es más fácil planificar la recuperación de esta falla. Hay muchas razones por las que un contenedor falla, por lo que la tecla de reinicio le dice al contenedor que se active o no. Tiene las siguientes opciones, no, siempre, en caso de falla y a menos que se detenga. Estas opciones implican que un contenedor nunca se reiniciará, siempre se reiniciará, solo se reiniciará en caso de falla o solo cuando se detenga.

He aquí un ejemplo:

reiniciar: siempre

Depende de

Los servicios se ejecutan de forma aislada. Pero prácticamente, los servicios no pueden hacer mucho de forma aislada. Debe haber una dependencia de otros servicios. Por ejemplo, el servicio de backend de una aplicación web dependerá de las bases de datos, los servicios de almacenamiento en caché, etc. En la tecla "depende_en", puede agregar las dependencias.

He aquí un ejemplo:

depende de:
- db

Hacer esto significa que Docker Compose iniciará esos servicios antes que el actual. Sin embargo, no garantiza que esos servicios estén listos para su uso. La única garantía es que los contenedores se pondrán en marcha.

Ambiente

Las aplicaciones dependen de ciertas variables. Para mayor seguridad y facilidad de uso, los extrae del código y los configura como variables de entorno. Ejemplos de tales variables son claves de API, contraseñas, etc. Estos son comunes en las aplicaciones web. Tenga en cuenta que esta clave solo funciona si no hay una directiva de "compilación" en ese servicio. Por lo tanto, cree la imagen de antemano.

Mira este:

ambiente:
API-KEY: 'la-clave-api'
CONFIG: 'desarrollo'
SESSION_SECRET: 'el-secreto'

Si tiene la intención de utilizar la directiva "build" independientemente, deberá definir las variables de entorno en una directiva "args". La directiva "args" es una subdirectora de "build".

He aquí un ejemplo:

construir:
contexto: .
argumentos:
api-key: 'la-clave-api'
config: 'desarrollo'
session_secret: 'el-secreto'

Puertos

Ningún contenedor funciona de forma aislada a pesar de que se ejecuta por separado de los demás. Para proporcionar un enlace para comunicarse con el "mundo exterior", necesita mapear puertos. Asigna el puerto del contenedor Docker al puerto de host real. En Docker, es posible que se haya encontrado con el argumento "-p" que se usa para asignar puertos. La directiva de puertos funciona de manera similar al argumento "-p".

puertos:
- "5000: 8000"

Volúmenes

Los contenedores Docker no tienen forma de almacenar datos de manera persistente, por lo que pierden datos cuando se reinician. Con los volúmenes, puede solucionar este problema. Volumes hace posible crear un almacenamiento de datos persistente. Lo hace montando un directorio desde el host de la ventana acoplable en el directorio del contenedor de la ventana acoplable. También puede configurar volúmenes como servicios de nivel superior.

He aquí un ejemplo:

volúmenes:
- host-dir: / test / directorio

Hay muchas opciones disponibles al configurar volúmenes, puede consultarlas.

Redes

Las redes también se pueden crear en servicios. Con la clave de redes, puede configurar la red para servicios individuales. Aquí, puede configurar el controlador que utiliza la red, si permite IPv6, etc. También puede configurar redes como servicios, como volúmenes.

He aquí un ejemplo:

redes:
- defecto

Hay muchas opciones a la hora de configurar redes, puedes consultarlas.

Punto de entrada

Cuando inicia un contenedor, a menudo debe ejecutar ciertos comandos. Por ejemplo, si el servicio es una aplicación web, debe iniciar el servidor. La tecla de punto de entrada te permite hacer esto. Entrypoint funciona como ENTRYPOINT en Dockerfile. La única diferencia en este caso es que lo que defina aquí anula las configuraciones de ENTRYPOINT en el Dockerfile.punto de entrada: matraz

He aquí un ejemplo:

punto de entrada: funcionamiento del matraz

Comandos de Docker Compose

Después de crear un archivo Docker-Compose, debe ejecutar ciertos comandos para que Compose funcione. En esta sección, aprenderá sobre algunos de los principales comandos de Docker Compose. Ellos son:

Docker-componer

Este comando de Docker-compose ayuda a construir la imagen, luego crea e inicia contenedores de Docker. Los contenedores son de los servicios especificados en el archivo de redacción. Si los contenedores ya se están ejecutando y ejecuta docker-compose up, vuelve a crear el contenedor. El comando es:

ventana acoplable-componer

Inicio de la composición de Docker

Este comando de Docker-compose inicia los contenedores de Docker, pero no crea imágenes ni crea contenedores. Por lo tanto, solo inicia contenedores si se han creado antes.

Parada de composición de Docker

A menudo, deberá detener los contenedores después de crearlos e iniciarlos. Aquí es donde el comando de detención de Docker-compose resulta útil. Este comando básicamente detiene los servicios en ejecución, pero los contenedores de configuración y las redes permanecen intactos.
El comando es:

parada de docker-compose

Docker-componer abajo

El comando Docker-compose down también detiene los contenedores Docker como lo hace el comando stop. Pero va más allá. Docker-compose down, no solo detiene los contenedores, también los elimina. Las redes, los volúmenes y las imágenes reales de Docker también se pueden eliminar si usa ciertos argumentos. El comando es:

docker-componer abajo

Si tiene la intención de eliminar volúmenes, especifique agregando -volumes. Por ejemplo:

docker-compose down --volumes

Si tiene la intención de eliminar imágenes, especifique agregando -rmi todo o -rmi local. Por ejemplo:

docker-compose down --rmi all
docker-compose down --rmi local

Dónde todas hace que Docker Compose elimine todas las imágenes y local hace que Docker Compose elimine solo las imágenes sin una etiqueta personalizada establecida por el campo 'imagen'.

Pausa de composición de Docker

Hay escenarios en los que tienes que suspender un contenedor, sin matarlo ni eliminarlo. Puede lograr esto con el comando Docker-compose pause. Pausa las actividades de ese contenedor, para que pueda reanudarlas cuando lo desee. El comando es:

pausa de docker-compose

Docker-componer deshacer la pausa

El comando docker-compose unpause es lo opuesto al comando docker-compose pause. Puede usarlo para reanudar procesos suspendidos como resultado del uso de Docker-compose pause. El comando es:

docker-compose anular la pausa

Docker-componer ps

Docker-compose ps enumera todos los contenedores creados a partir de los servicios en el archivo Docker-Compose. Esto es similar a docker ps que enumera todos los contenedores que se ejecutan en el host de la ventana acoplable. Sin embargo, docker-compose ps es específico de los contenedores del archivo Docker Compose. El comando es:

docker-compose ps

Reuniéndolo todo

Ahora que ha visto algunos de los conceptos clave detrás de un archivo Docker Compose, reunámoslo todo. A continuación se muestra un archivo Docker-Compose de muestra para una aplicación web Python Django. Verá un desglose de cada línea en este archivo y verá lo que hacen.

versión: '3'
servicios:
db:
imagen: postgres
web:
construir: .
comando: Python administrar.py runserver 0.0.0.0: 8000
volúmenes:
- .:/código
puertos:
- "8000: 8000"
depende de:
- db

La historia corta es que con este archivo Docker-Compose, se crea una base de datos PostgreSQL y se inicia un servidor django.

La larga historia es:

  1. Este archivo usa la versión 3 de Docker-Compose.
  2. Crea dos servicios. Los servicios web y db.
  3. El servicio db usa la imagen oficial de postgres de docker.
  4. El servicio web crea su propia imagen a partir del directorio actual. Dado que no define el contexto y las claves de Dockerfile, se espera que Dockerfile se llame "Dockerfile" por convención.
  5. Se define el comando que se ejecutará después de que se inicie el contenedor.
  6. El volumen y los puertos están definidos. Ambos usan la convención de host: mapeo de contenedores.
  7. Para volumen, el directorio actual "."Se asigna al directorio" / code "dentro del contenedor. Esto ayuda a que los datos del contenedor se vuelvan persistentes, por lo que no se pierden cada vez que se inicia el contenedor.
  8. Para el puerto, el puerto 8000 del host se asigna al puerto 8000 del contenedor. Tenga en cuenta que la aplicación web se ejecuta en el puerto 8000. Por lo tanto, se puede acceder a la aplicación web en el host a través de ese puerto.
  9. Finalmente, el servicio web depende del servicio db. Por lo tanto, el servicio web solo se iniciará cuando se haya iniciado el contenedor de base de datos.
  10. Puede obtener más información sobre Dockerfile para la aplicación Django y el archivo Docker Compose en la documentación.

Conclusión

No es necesario ser un experto en Docker para usar Docker Compose. Como principiante que no tiene la intención de dominar esta herramienta, está bien que aprenda lo que necesita solo. En este artículo, ha aprendido los conceptos básicos de Docker Compose. Ahora, comprende por qué se necesita Docker Compose, las comparaciones incorrectas, cómo configurar un archivo de configuración de Docker Compose y los comandos también. Es emocionante saber estas cosas, pero la verdadera alegría proviene de ponerlas en práctica. Es hora de ponerse a trabajar.

Las mejores distribuciones de Linux para juegos en 2021
El sistema operativo Linux ha recorrido un largo camino desde su apariencia original, simple y basada en servidor. Este sistema operativo ha mejorado ...
Cómo capturar y transmitir su sesión de juego en Linux
En el pasado, los juegos solo se consideraban un pasatiempo, pero con el tiempo la industria del juego experimentó un gran crecimiento en términos de ...
Los mejores juegos para jugar con el seguimiento de manos
Oculus Quest presentó recientemente la gran idea del seguimiento manual sin controladores. Con un número cada vez mayor de juegos y actividades que ej...