Una guía para principiantes para componer Docker

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

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

  • ¿Qué es Docker Compose??
  • Comparaciones populares
  • Docker Compose vs Kubernetes
  • Docker Compose vs Docker Swarm
  • Instalación de Docker Compose
  • El Docker-Compose.archivo YML
  • Comandos de Docker-Compose

Antes de sumergirse en las jugosas partes de este artículo, un poco de experiencia en la tecnología debería ser increíble.

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

El problema para hacer esto es que habrá tantos contenedores en ejecución. Tal que administrarlos se vuelve complejo. Esto crea una necesidad de una herramienta ayuda a ejecutar múltiples contenedores, lo que Docker Compose hace. Al final del artículo, comprenderá los conceptos básicos de componer 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 micro-servicios? El concepto de dividir una aplicación web en diferentes servicios? Bueno, esos servicios se ejecutarán en contenedores individuales que deben administrarse.

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

  • Inscribirse
  • Iniciar sesión
  • Restablecer la contraseña
  • Historia
  • Cuadro

Después de una arquitectura similar a un microservicio, estos servicios se dividirán y se 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 construye explícitamente imágenes de Docker. Docker realiza el trabajo de la construcción de imágenes 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 las incorrectas. Si bien a menudo no son válidos, es mejor que aprendas sobre ellos, ya que te ayuda a comprender mejor a Docker a componer.

Las dos comparaciones a discutir son:

  • Docker Compose vs Kubernetes
  • Docker Compose vs Docker Swarm

Docker Compose vs Kubernetes

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

Kubernetes conocido popularmente como K8S es una herramienta de código abierto que se puede usar para automatizar contenedores (no restringidos a Docker). Con K8s, puede implementar y administrar contenedores, asegurando que se escalen a diferentes cargas. Kubernetes asegura que los contenedores sean tolerantes a fallas y funcionen de manera óptima al hacer que sean autoinitores, lo que no obtendrá de Docker Compose.

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

Docker Compose vs Docker Swarm

Docker Compose también se compara a menudo con Docker Swarm, y es tan incorrecto 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 contras, pero ese no es el tema de la discusión. Te irá bien sabiendo que ambos son similares y tampoco 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. Por lo tanto, 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-composa

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/comunes/descargar/1.18.0/Docker-Compose-'uname
-s ' -' uname -m '-o/usr/local/bin/docker -composa

Entonces:

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

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

El Docker-Compose.archivo YML

No será terriblemente incorrecto decir que un archivo de composición de Docker es para componer Docker, qué es un DockerFile para Docker. Dentro del archivo de composición de Docker, se encuentran todas las instrucciones que Docker Compose sigue al administrar los contenedores. Aquí, define los servicios que terminan siendo contenedores. También define las redes y volúmenes de los que dependen los servicios.

El archivo Docker Compose usa la sintaxis Yaml, y debe guardar como Docker-Compose.YML. Puede tener servicios para las colas de backend, frontend, base de datos y mensajes en una aplicación web. Estos servicios necesitarán dependencias específicas. Dependencias como las redes, los puertos, el almacenamiento para una operación óptima. Todo lo necesario para toda la aplicación se definirá en el archivo de composición de Docker.

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

  • Versión
  • Servicios
  • Red
  • Volúmenes

Sin embargo, solo se discutirá 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, Docker Compose solo tiene versiones 1, 2 y 3. No es sorprendente que sea la versión recomendada para usar, ya que tiene ciertas diferencias con las versiones anteriores.

Puede especificar la versión para usar para Docker Compose en el archivo como se ve a continuación:

  • Versión: "3"
  • Versión 2.4 "
  • Versión 1.0 "

Servicios

La clave de servicio es posiblemente la clave más importante en un archivo de composición de Docker. 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 bajo la clave de servicios:

  • Imagen
  • Contenedor_name
  • Reanudar
  • Depende de
  • Ambiente
  • Puerto
  • Volúmenes
  • Redes
  • Punto de entrada

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

Imagen

Esta opción define qué imagen como servicio usa el servicio. Utiliza la misma convención que usa al extraer una imagen de DockerHub en un Dockerfile. Aquí hay un ejemplo:

Imagen: Postgres: Último

Sin embargo, no hay restricción al usar archivos DockerHub solo. También puede crear imágenes desde su máquina a través de su archivo Docker Compose, utilizando un DockerFile. Puede usar las directivas "Build", "Context" y "DockerFile" para hacer esto.

Aquí hay un ejemplo:

construir:
contexto: .
Dockerfile: Dockerfile

El "contexto" debe contener la ruta al directorio con DockerFile. Entonces "Dockerfile" contiene el nombre del Dockerfile que se utilizará. Es convencional nombrar siempre a sus dockerfiles como "dockerfile", pero esto 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.

Contenedor_name

Docker asigna nombres aleatorios a contenedores. Pero puede desear tener nombres personalizados para los contenedores. Con la tecla "Container_name", puede dar nombres específicos a los contenedores, en lugar de los nombres generados al azar.

Aquí hay un ejemplo:

contenedor_name: linuxhint-app

Sin embargo, hay una cosa sobre la que debe tener cuidado: no dé el mismo nombre a múltiples servicios. Los nombres de los contenedores tienen que ser únicos; Hacerlo hará que los servicios fallarán.

Reanudar

La infraestructura de software está condenada a fallar. Con el conocimiento de esto, es más fácil planear recuperarse de este fracaso. Hay muchas razones para que un contenedor falle, por lo que la clave de reinicio le dice al contenedor que se despierta o no. Tiene las siguientes opciones, no, siempre, en falso y a menos que se parezca. Estas opciones implican que un contenedor nunca se reiniciará, siempre se reiniciará, solo se reiniciará en la falla o solo cuando se detenga.

Aquí hay 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 back -end de una aplicación web dependerá de bases de datos, servicios de almacenamiento en caché, etc. En la tecla "Depends_on", puede agregar las dependencias.

Aquí hay un ejemplo:

depende de:
- db

Hacer esto significa que Docker Compose comenzará esos servicios antes de los actuales. Sin embargo, no garantiza que esos servicios estén listos para su uso. La única garantía es que los contenedores comenzarán.

Ambiente

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

Mira este:

ambiente:
Api-key: 'the-apikey'
Configuración: 'Desarrollo'
Session_secret: 'The Secret'

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

Aquí hay un ejemplo:

construir:
contexto: .
Args:
api-key: 'the-apikey'
Configuración: 'Desarrollo'
session_secret: 'The Secret'

Puerto

Ningún contenedor funciona de forma aislada a pesar de correr por separado de los demás. Para proporcionar un enlace para comunicarse con el "mundo exterior", debe mapear puertos. Usted asigna el puerto del contenedor Docker al puerto de host real. Desde Docker, es posible que haya encontrado el argumento "-P" que se utiliza para mapear puertos. La Directiva de Ports funciona de manera similar al argumento "-P".

Puertos:
- "5000: 8000"

Volúmenes

Los contenedores de Docker no tienen medios para almacenar datos de manera persistente, por lo que pierden datos cuando se reinician. Con volúmenes, puedes trabajar alrededor de esto. Los volúmenes permiten crear un almacenamiento de datos persistente. Hace esto al montar un directorio del host de Docker en el directorio del contenedor Docker. También puede configurar volúmenes como servicios de nivel superior.

Aquí hay 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 los servicios. Con la tecla Networks, puede configurar las redes para servicios individuales. Aquí, puede configurar el controlador que usa la red, si permite IPv6, etc. También puede configurar redes como servicios, al igual que los volúmenes.

Aquí hay un ejemplo:

Redes:
- por defecto

Hay muchas opciones al configurar redes, puede 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 EntryPoint le 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 DockerFile.Entrypoint: Flask Run

Aquí hay un ejemplo:

Entrypoint: Flask Run

Docker Compose Commands

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

  • Docker-compuesto
  • Docker-compuesto hacia abajo
  • Inicio de composición de Docker
  • Docker-Compose Stop
  • Pausa de Docker-Compose
  • Docker-Compose impause
  • Docker-Compose PS

Docker-compuesto

Este comando Docker-Compose ayuda a construir la imagen, luego crea e inicia contenedores Docker. Los contenedores provienen de los servicios especificados en el archivo de composición. Si los contenedores ya se están ejecutando y se ejecuta Docker-Compose Up, recrea el contenedor. El comando es:

Docker-compuesto

Inicio de composición de Docker

Este comando Docker-Compose comienza los contenedores Docker, pero no crea imágenes ni crea contenedores. Entonces solo inicia contenedores si se han creado antes.

Docker-Compose Stop

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

Docker-Compose Stop

Docker-compuesto hacia abajo

El comando Docker-Compose Down también detiene los contenedores Docker como lo hace el comando stop. Pero va el esfuerzo extra. Docker-Compose Down, no solo detiene los contenedores, sino que también los elimina. Las redes, los volúmenes y las imágenes de Docker reales también se pueden eliminar si usa ciertos argumentos. El comando es:

Docker-compuesto hacia abajo

Si tiene la intención de eliminar los volúmenes, especifica agregando -Volumes. Por ejemplo:

Docker-Compose Down-Volumes

Si tiene la intención de eliminar las imágenes, especifica agregando -RMI todos o -RMI local. Por ejemplo:

Docker-Compose Down--Rmi todos
Docker-Compose Down--RMI Local

Dónde todo hace que Docker componga eliminar todas las imágenes, y local Causa Docker componía eliminar solo imágenes sin una etiqueta personalizada establecida por el campo 'Imagen'.

Pausa de Docker-Compose

Hay escenarios en los que tienes que suspender un contenedor, sin matarlo o eliminarlo. Puede lograr esto con el comando Docker-compose Pause. Hace una pausa de las actividades de ese contenedor, por lo que puede reanudarlas cuando desee. El comando es:

Pausa de Docker-Compose

Docker-Compose impause

El impausión Docker-Compose es lo opuesto al comando Docker-Compose Pause. Puede usarlo para reanudar los procesos suspendidos como resultado del uso de Docker-Compose PAUSE. El comando es:

Docker-Compose impause

Docker-Compose 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 Docker. Sin embargo, Docker-Compose PS es específico para los contenedores del archivo de composición de Docker. El comando es:

Docker-Compose PS

Reuniendo todo

Ahora que ha visto algunos de los conceptos clave detrás de un archivo de composición de Docker, vamos a unirlo todo. A continuación se muestra una muestra de archivo Docker-compuesto para una aplicación web de 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 Manage.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 utiliza la versión 3 de Docker-Compose.
  2. Crea dos servicios. Los servicios web y los servicios web.
  3. El servicio DB utiliza la imagen oficial de Docker Postgres.
  4. El servicio web construye su propia imagen desde el directorio actual. Dado que no define el contexto y las claves de Dockerfile, se espera que Dockerfile se llame "Dockerfile" por la convención.
  5. Se define el comando que se ejecutará después del contenedor.
  6. Se definen el volumen y los puertos. Ambos usan la convención del host: mapeo de contenedores.
  7. Para el volumen, el directorio actual "."Se asigna al directorio"/código "dentro del contenedor. Esto ayuda a que los datos en el contenedor se vuelvan persistentes, por lo que no se pierde cada vez que comienza el contenedor.
  8. Para el puerto, el puerto del host 8000 se asigna al puerto del contenedor 8000. 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 comenzará cuando el contenedor de DB haya comenzado.
  10. Se puede obtener más sobre el DockerFile para la aplicación Django y el archivo Docker Compose de la documentación.

Conclusión

No necesita ser un experto con Docker para usar Docker Compose. Como principiante que no tiene la intención de dominar esta herramienta, está bien aprender lo que necesita solo. En este artículo, has aprendido los conceptos básicos de Docker Compose. Ahora, comprende por qué Docker Compose es necesario, 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 a practicar. Es hora de ir a trabajar.