Si es un principiante para componer Docker, pero tiene algún conocimiento de Docker, este artículo es para usted. Podrás aprender sobre:
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.
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:
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
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:
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:
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:
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: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: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
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-compuestoInicio 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-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 abajoSi 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-ComposeDocker-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 impauseDocker-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 PSReuniendo 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:
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.