Redacción de Docker es una herramienta para definir y ejecutar aplicaciones docker de varios contenedores en Linux. Con Compose, usamos un archivo YAML para configurar los servicios de nuestra aplicación. Y luego creamos e iniciamos todos los servicios desde la configuración con un solo comando. Aquí hay una ilustración gráfica simple que muestra cómo funciona la composición de Docker.
Cómo funciona la composición de Docker:una ilustración gráfica
Docker Compose es básicamente un proceso de tres pasos:
- Primero, necesitamos definir el entorno de la aplicación con un Dockerfile para que pueda reutilizarse de nuevo.
- En segundo lugar, definimos los servicios que componen la aplicación en docker-compose.yml para que puedan funcionar juntos en un entorno aislado.
- Finalmente, ejecutamos docker-compose up y Compose iniciará y ejecutará toda su aplicación.
Primeros pasos con Docker Compose en Linux
Docker Compose se puede instalar de dos maneras. Puede encontrar las instrucciones de instalación en la sección "Instalar Docker Compose" en los siguientes enlaces.
- Cómo instalar Docker en Ubuntu
- Cómo instalar Docker en CentOS
Después de la instalación, verifique la versión de Docker compose usando los comandos:
# docker-compose -version
O,
# docker-compose -v
O,
# docker-compose --version
Comprobar la versión de redacción de la ventana acoplable
Para obtener ayuda, simplemente ejecute:
# docker-compose -help
Este comando mostrará una lista de los comandos que puede ejecutar docker compose.
Ayuda para redactar la ventana acoplable
Ahora tomemos un archivo de composición simple de docker como ejemplo. Aquí está el contenido de mi archivo de composición.
Ejemplo de archivo de redacción de ventana acoplable
El archivo de redacción de la ventana acoplable anterior es un archivo mínimo para comprender el contenido básico dentro del archivo de redacción.
Podemos verificar la validez del archivo usando el comando:
# docker-compose config
Comprobar la validez del archivo de redacción de la ventana acoplable
Si proporciona una versión incorrecta dentro del archivo de composición de la ventana acoplable, aparecerá un mensaje de error.
Mensaje de error de redacción del archivo de Docker
Ahora ejecutemos el archivo de composición usando el comando:
# docker-compose up -d
Iniciará todos los servicios con un solo comando.
Ejecutar composición docker
Para enumerar los contenedores en ejecución creados por el archivo de redacción, ejecute:
# docker-compose ps
Lista de contenedores docker en ejecución
Podemos cerrar la aplicación en cualquier momento con el siguiente comando:
# docker-compose down
Detener contenedores docker
También podemos asignar un puerto diferente a nginx, por ejemplo 8181.
Para hacerlo, simplemente defina el puerto en el archivo de redacción como se muestra en la siguiente imagen.
Definir contenedor de puerto nginx
Ahora el nginx está expuesto al puerto 8181. Iniciemos el contenedor y verifiquemos si Nginx se está ejecutando en el puerto 8181.
Iniciar contenedor nginx
Abra el navegador y verifique si se está ejecutando en el puerto 8181.
Pruebe el contenedor nginx en el navegador web
Si desea escalar el servicio, puede hacerlo usando el comando:
# docker-compose up -d --scale database=3
Escale servicios usando docker compose
Para mostrar los servicios en ejecución, ejecute:
# docker-compose top
Mostrar servicios en ejecución usando docker compose
Para parar, empezar. reiniciar todo el servicio a la vez, los comandos serían:
# docker-compose stop
# docker-compose start
# docker-compose restart
Podemos ver los registros de los servicios usando el comando:
# docker-compose logs
Mostrar registros de servicios
Redes en docker-compose
Docker Compose configura una única red para su aplicación de forma predeterminada. Cada contenedor se une a la red predeterminada y los contenedores podrán comunicarse en esa red predeterminada.
Sin embargo, puede crear una nueva red usando componer si no desea la red predeterminada.
A los efectos de esta guía, utilizo los siguientes tres archivos:
- Dockerfile
- docker-compose.yml
- servidor.py
Aquí está el contenido de Dockerfile:
contenido del archivo docker
Contenido de docker-compose.yml:
Contenido del archivo de redacción de Docker
Contenido de server.py:
contenido del archivo de la aplicación
Ahora construye la imagen usando el comando:
# docker-compose build
Una vez que se complete la compilación, verá el siguiente resultado:
Crear imagen acoplable
Como puede ver, la imagen se construyó con éxito. Puede verificarlo usando el comando:
# docker images
Lista de imágenes acoplables
Como puede ver en el resultado anterior, una imagen de Docker llamada image1 se crea.
Ahora ejecute el archivo de redacción:
# docker-compose up -d
Ejecute el archivo de redacción de la ventana acoplable
Compruebe si la nueva red se crea o no con el comando:
# docker network ls
Comprobar la red acoplable
De la captura de pantalla anterior, podemos confirmar una nueva red llamada dc_network_my-network ha sido creado.
Verifiquemos si el contenedor se está ejecutando o no usando el comando "docker ps":
# docker ps
salida del comando docker ps
¡Sí, el contenedor se está ejecutando!
Finalmente ejecute el archivo de código de la aplicación (server.py) usando el comando curl:
# curl localhost:15001
O,
# curl 10.26.35.244:15001
salida de la aplicación
Estamos obteniendo resultados:¡Hola, mundo, del nodo 1! que está escrito en el archivo server.py. ¡Significa que funciona!
Lectura sugerida:
- Explicación de los conceptos de red de Docker
- Explicación de los volúmenes de Docker con ejemplos
- Cómo actualizar automáticamente los contenedores de Docker en ejecución
- ctop:una herramienta de supervisión de línea de comandos para contenedores de Linux
- Portainer:la forma más sencilla de administrar Docker
- PiCluster:una sencilla aplicación de gestión de Docker basada en web
- Dockly:administrar contenedores Docker desde la terminal
Sobre el autor:
Dhruv Tiwari es un ingeniero de DevOps al que le encanta automatizar cosas, trabajar con Linux a escala y sueña con el día en que los sistemas sean lo suficientemente inteligentes como para no tener que iniciar sesión en una caja de Linux. Viaje de CI/CD desde el código fuente hasta la implementación del código y la producción.