Si es un principiante en Docker Compose, pero tiene algún conocimiento de Docker, este artículo es para usted. Aprenderás sobre:
- ¿Qué es Docker Compose??
- Comparaciones populares
- Docker Compose frente a Kubernetes
- Docker Compose frente a Docker Swarm
- Instalación de Docker Compose
- El Docker-Compose.Archivo yml
- Comandos de Docker-Compose
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:
- Inscribirse
- Registrarse
- Restablecer la contraseña
- Historia
- Gráfico
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
- Docker Compose frente a Docker Swarm
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-composePara instalar Docker Compose en otras distribuciones de Linux, puede usar curl. Simplemente ejecute los siguientes comandos:
sudo curl -Lhttps: // 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-composeEl 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:
- Versión
- Servicios
- La red
- Volúmenes
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:
- 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 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:
- Imagen
- Nombre_contenedor
- Reanudar
- Depende de
- Ambiente
- Puertos
- Volúmenes
- Redes
- Punto de entrada
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: últimoSin 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-appSin 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: siempreDepende 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 matrazComandos 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
- Docker-componer abajo
- Inicio de la composición de Docker
- Parada de composición de Docker
- Pausa de composición de Docker
- Docker-componer deshacer la pausa
- Docker-componer ps
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-componerInicio 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:
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 abajoSi tiene la intención de eliminar volúmenes, especifique agregando -volumes. Por ejemplo:
docker-compose down --volumesSi tiene la intención de eliminar imágenes, especifique agregando -rmi todo o -rmi local. Por ejemplo:
docker-compose down --rmi alldocker-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-composeDocker-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 pausaDocker-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 psReunié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:
- Este archivo usa la versión 3 de Docker-Compose.
- Crea dos servicios. Los servicios web y db.
- El servicio db usa la imagen oficial de postgres de docker.
- 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.
- Se define el comando que se ejecutará después de que se inicie el contenedor.
- El volumen y los puertos están definidos. Ambos usan la convención de host: mapeo de contenedores.
- 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.
- 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.
- 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.
- 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.