Docker es una herramienta que permite a los desarrolladores empaquetar sus aplicaciones y todas sus dependencias en un único contenedor. Este contenedor puede transportarse y ejecutarse fácilmente en cualquier máquina que tenga Docker instalado, sin preocuparse de las diferencias en el entorno. Es como una forma estandarizada de empaquetar y ejecutar software.
¿Qué es un contenedor?
Un container es como un pequeño paquete que contiene todo lo que un programa necesita para ejecutarse, lo que facilita su traslado y ejecución en distintos ordenadores sin causar ningún problema.
Lo mejor es que este miniordenador (contenedor) es como un superhéroe con capa. Puede funcionar en cualquier ordenador, por muy diferente que sea, porque trae consigo su propio entorno especial. Es una forma limpia y ordenada de mantener el software organizado y asegurarse de que funciona de la misma manera vaya donde vaya.
- Consistencia: Docker se asegura de que el software funcione de la misma manera en tu ordenador, en el ordenador de tu amigo o en cualquier ordenador. Mantiene la coherencia.
- Portabilidad: Puedes empaquetar tu software y sus amigos en un contenedor Docker, y puede viajar a cualquier parte. Es como meter tu juego y todas sus reglas en una maleta y jugarlo en casa de un amigo.
- Aislamiento: Los contenedores Docker son como pequeñas burbujas. Lo que ocurre dentro de la burbuja se queda dentro de la burbuja. Esto significa que un programa en un contenedor no se meterá con otro programa fuera de su contenedor.
- Eficiencia: Docker ayuda a ahorrar recursos informáticos. En lugar de tener un ordenador entero sólo para un programa, puedes tener muchos contenedores ejecutándose en el mismo ordenador sin que se estorben unos a otros.
- Rapidez: Docker hace que sea rápido y fácil iniciar, detener y compartir software. Es como encender y apagar una videoconsola: rápido y sencillo.
Docker Image
Una imagen Docker es una instantánea de un programa y todo lo que necesita para ejecutarse. Es una versión empaquetada que incluye el código, las herramientas y la configuración, igual que una instantánea de tu receta de galletas con todos los ingredientes.
La imagen es la receta, y el contenedor es lo que obtienes cuando sigues esa receta para hacer y ejecutar el programa.
docker run nginx
Este comando le dice a Docker que ejecute un contenedor usando la imagen «nginx». Es como decirle a Docker que inicie una nueva instancia de un programa prefabricado (nginx, que es un servidor web).
docker ps
Muestra una lista de los contenedores en ejecución. Es como comprobar qué programas se están ejecutando actualmente.
docker ps -a
Muestra una lista de todos los contenedores, incluyendo los que se han detenido. Es como comprobar un historial de todos los programas que se han ejecutado.
docker stop silly_sammet
Detiene un contenedor en ejecución llamado «silly_sammet». Es como apagar un programa que se está ejecutando actualmente.
docker rm silly_sammet
Elimina un contenedor detenido llamado «silly_sammet». Es como tirar las instrucciones de un programa que ya no necesitas.
docker images
Lista todas las imágenes Docker que tienes. Es como ver un menú de todos los diferentes programas que puedes ejecutar.
docker rmi nginx
Elimina la imagen «nginx». Es como borrar la receta de un programa que ya no quieres usar.
docker pull nginx
Descarga la imagen «nginx» de internet. Es como obtener una nueva receta de un libro de cocina.
docker run ubuntu sleep 5
Ejecuta un contenedor usando la imagen «ubuntu» y lo hace dormir durante 5 segundos. Es como iniciar un programa que sólo espera un poco y luego se detiene.
docker exec distracted_mcclintock cat /etc/hosts
Ejecuta un comando dentro de un contenedor en ejecución llamado «distracted_mcclintock». Es como echar un vistazo dentro del libro de recetas para ver una página específica.
docker run -d kodekloud/simple-webap
Ejecuta un contenedor en modo separado desde la imagen «kodekloud/simple-webapp». Es como iniciar un programa y dejar que se ejecute en segundo plano.
docker attach a043d
Adjunta tu terminal a un contenedor en ejecución con el ID «a043d». Es como saltar a un programa en ejecución para ver qué está pasando.
Algunos conceptos de Docker
Ejecutar con una etiqueta (tag)
Las etiquetas son como versiones de un programa. Es especificar qué versión quieres ejecutar.
Ejemplo de código:
docker run nginx:latest
Esto ejecuta la última versión del programa Nginx.
Ejecutar con STDIN
STDIN es como escribir en tu teclado. Algunos programas quieren su entrada.
Ejemplo de código:
docker run -i -t ubuntu
Esto ejecuta un terminal interactivo dentro de un contenedor Ubuntu, lo que le permite escribir comandos.
Ejecutar con mapeo de puertos:
Los puertos son como puertas. Los programas los utilizan para comunicarse con el mundo exterior.
Ejemplo de código:
docker run -p 8080:80 nginx
Esto ejecuta Nginx, y abre la puerta el puerto 8080 de tu ordenador, conectándolo al puerto 80 del contenedor.
Ejecutar con Volume Mapping:
Los volúmenes son como carpetas compartidas. Te permiten almacenar cosas fuera del contenedor.
Ejemplo de código:
docker run -v /su/carpeta/local:/carpeta/contenedor nginx
Esto ejecuta Nginx y conecta una carpeta en su ordenador a una carpeta dentro del contenedor.
Inspeccionar contenedor
Inspeccionar es como echar un vistazo más de cerca a un programa en ejecución.
Inspeccionar el contenedor:
Inspeccionar es como echar un vistazo más de cerca a un programa en ejecución.
Ejemplo de código:
docker inspect container_name
Esto le da información detallada acerca de un contenedor en ejecución o detenido.
Registros del Contenedor
Los registros son como un diario. Registran lo que un programa ha estado haciendo.
Ejemplo de código:
docker logs container_name
Esto te muestra los logs o actividades de un contenedor específico.
Variables de entorno
Las variables de entorno son como notas útiles que los programas usan para encontrar información importante, ¡algo así como mensajes secretos para que el programa entienda y funcione mejor!
Variables de entorno en un script Python (app.py):
Imagina que tienes un programa (app.py) escrito en Python. Puede que quieras personalizarlo sin cambiar el código. Puedes usar variables de entorno.
Código de ejemplo (app.py):
import os
app_color = os.getenv(«APP_COLOR», «default_color»)
print(f»The app color is {app_color}»)
Ejecutando el script normalmente: python app.py
Ejecutando con un color específico: export APP_COLOR=azul; python app.py
Uso de variables de entorno en Docker
Los contenedores Docker también pueden usar variables de entorno. Es como dar instrucciones al programa dentro del contenedor.
Código de ejemplo:
docker run -e APP_COLOR=verde simple-webapp-color
Esto ejecuta un contenedor Docker (simple-webapp-color) y establece la variable de entorno APP_COLOR en «verde».
Inspección de variables de entorno:
A veces, quieres comprobar qué variables de entorno está utilizando un contenedor en ejecución.
Ejemplo de código:
docker inspect blissful_hopper
Este comando proporciona información detallada sobre el contenedor llamado «blissful_hopper», incluyendo sus variables de entorno.
En términos simples, las variables de entorno son como pequeñas notas que un programa (o un contenedor Docker) puede leer para saber cómo comportarse. Puedes establecer estas notas antes de ejecutar el programa, y el programa las utilizará para personalizarse. El comando export en el segundo ejemplo es como escribir una nota antes de ejecutar un programa, diciéndole cómo comportarse. El comando docker inspect es como mirar dentro de un contenedor para ver qué notas tiene.
Imágenes Docker
Dockerfile
Un Dockerfile es como un conjunto de instrucciones para que Docker cree una imagen. Es como una receta para hornear un pastel.
# Use the Ubuntu base image
FROM Ubuntu
# Update apt repository
RUN apt-get update
# Install dependencies using apt
RUN apt-get install -y python
# Install Python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql
# Copy source code to /opt folder
COPY . /opt/source-code
# Set the working directory
WORKDIR /opt/source-code
# Specify entry point to run the web server
ENTRYPOINT [«flask», «run»]
Pasos para crear su propia imagen:
Crea un archivo llamado Dockerfile con el contenido anterior.
Guárdelo en el mismo directorio que su código fuente.
Construir la imagen Docker
Ejecuta el siguiente comando en el terminal:
docker build -t tu-nombre-de-imagen .
Este comando le dice a Docker que construya una imagen utilizando el Dockerfile en el directorio actual (.), y la etiquete con un nombre de su elección (-t your-image-name).
Arquitectura por capas:
Piensa en la imagen Docker como un pastel en capas. Cada instrucción en el Dockerfile añade una capa a la imagen.
Las capas son reutilizables. Si cambias algo en tu código, Docker sólo reconstruye la capa afectada, haciéndolo eficiente.
Salida de construcción de Docker
Cuando construyes una imagen, Docker muestra cada paso del proceso. Si hay un fallo, te dará un mensaje de error.
¿Qué puedes contenerizar?
- Casi cualquier cosa. Aplicaciones, servicios, bases de datos, sitios web, básicamente cualquier software puede ser contenedorizado.
- Es como poner tu software en una caja para que pueda ejecutarse en cualquier lugar sin causar problemas.
Docker CMD vs ENTRYPOINT
CMD en Docker:
Piensa en CMD como la cosa por defecto que hace tu programa cuando arrancas el contenedor.
Es como decir: «Oye, cuando ejecutes este contenedor, haz esto por defecto».
Ejemplo: CMD [«flask», «run»] significa que cuando el contenedor se inicia, ejecuta automáticamente el servidor web Flask.
Ejemplo CMD:
FROM alpine
CMD [«sleep», «5»]
En este ejemplo, cuando se ejecuta un contenedor utilizando esta imagen, se duerme automáticamente durante 5 segundos.
ENTRYPOINT en Docker:
Piensa en ENTRYPOINT como la cosa principal que hace tu contenedor. Es como el comando jefe.
Establece una aplicación por defecto para ejecutar cuando el contenedor se inicia, pero todavía se puede anular si lo desea.
Ejemplo: ENTRYPOINT [«flask», «run»] significa que el contenedor está destinado principalmente a ejecutar el servidor web Flask, pero todavía puedes añadir más comandos si es necesario.
Ejemplo ENTRYPOINT:
FROM alpine
ENTRYPOINT [«sleep»]
CMD [«5»]
En este caso, el propósito principal es dormir, y aún puede anular la duración del sueño si lo desea.
En ambos casos, el contenedor dormirá durante unos segundos cuando se inicie. La diferencia clave está en la forma de proporcionar los parámetros y si pueden o no ser fácilmente anulados.
CMD es como decir, «Esto es lo que hay que hacer por defecto», y ENTRYPOINT es como decir, «Esto es lo principal que hay que hacer, pero puedes ajustarlo un poco si quieres». Ambos ayudan a definir lo que tu contenedor hace cuando se inicia.
Redes en Docker
Las redes en Docker ayudan a los contenedores (programas) a hablar entre ellos, asegurando que puedan trabajar juntos sin problemas.
Redes por defecto
Docker crea redes por defecto para que los contenedores se comuniquen.
Ejemplo de código:
docker run ubuntu –network=host
Esto ejecuta un contenedor Ubuntu utilizando la red del host, lo que significa que comparte el espacio de nombres de red con el host.
Redes definidas por el usuario
Puedes crear tus propias redes para una mejor organización y control.
Código de ejemplo:
docker network create –driver=bridge –subnet=182.18.0.0/16 custom-isolated-network
Esto crea una red puente definida por el usuario llamada custom-isolated-network con una subred específica.
Listado de Redes:
Puedes ver todas las redes que tienes.
Ejemplo de código:
docker network ls
Inspeccionando una Red:
Puede inspeccionar los detalles de una red específica.
Ejemplo de código:
docker network inspect blissful_hopper
Esto muestra información detallada sobre la red llamada «blissful_hopper».
DNS incorporado
Docker tiene un sistema DNS incorporado para que los contenedores se encuentren entre sí por su nombre.
Código de ejemplo:
mysql.connect(mysql)
Esto podría ser una línea en tu código donde un servicio llamado «mysql» se conecta a otro servicio llamado «mysql» usando el DNS de Docker.
Almacenamiento Docker
El almacenamiento en Docker es como decidir dónde guardar tus datos cuando utilizas contenedores. Puedes mantenerlos dentro del contenedor, compartirlos entre contenedores usando volúmenes, o almacenarlos fuera del contenedor para su custodia.
Sistema de archivos en Docker
Docker utiliza una arquitectura en capas para construir imágenes. Cada instrucción en el Dockerfile añade una nueva capa al sistema de archivos.
# Dockerfile
FROM Ubuntu
RUN apt-get update && apt-get install -y python
RUN pip install flask flask-mysql
COPY . /opt/código-fuente
WORKDIR /opt/código-fuente
ENTRYPOINT [«flask», «run»]
Las capas en el Dockerfile:
Capa 1: Capa base de Ubuntu
Capa 2: Cambios en los paquetes apt
Capa 3: Cambios en los paquetes pip
Capa 4: Código fuente
Capa 5: Actualización del punto de entrada con el comando «flask
Capa 6: Capa de contenedor
Capas de imagen
Cuando se construye una imagen Docker, ésta se compone de capas de sólo lectura. Cada capa representa un cambio o adición a la imagen.
Capa 1: Capa base de Ubuntu
Capa 2: Cambios en los paquetes apt
Capa 3: Cambios en los paquetes pip
Capa 4: Código fuente
Capa 5: Actualización del punto de entrada con el comando «flask
# Construir la imagen Docker
docker build -t mmumshad/my-custom-app .
Capa de contenedor
Cuando se ejecuta un contenedor Docker, se añade una capa de lectura-escritura sobre las capas de imagen de sólo lectura. Esta capa es específica del contenedor en ejecución.
Capa 6. Capa de contenedor
# Ejecutar el contenedor Docker
docker run mmumshad/mi-aplicacion-personalizada
Volúmenes
Los volúmenes son una forma de guardar los datos fuera del contenedor. Son como una especie de almacenamiento externo.
# Crear un volumen Docker
docker volume create volumen_datos
# Usar el volumen en un contenedor
docker run -v volumen_datos:/var/mysql mysql
También puedes montar directorios específicos desde el host al contenedor usando -v:
# Montar un directorio del host a un directorio del contenedor
docker run -v /ruta/en/host:/var/mysql/mysql -d mysql
El comando docker run –mount se utiliza para montar un directorio o archivo específico desde la máquina anfitriona a un contenedor Docker en ejecución.
docker run –mount type=bind,source=/mysql,target=/var/mysql mysql
Controladores de almacenamiento
Docker Compose
Docker Compose es una práctica herramienta que te ayuda a ejecutar y conectar fácilmente diferentes servicios de software como si todos formaran parte del mismo evento.
Conceptos básicos de Docker Compose
Ejecutando Contenedores Individuales:
Normalmente, podrías ejecutar contenedores Docker separados de la siguiente manera:
docker run mmumshad/simple-webapp
docker run mongodb
docker run redis:alpine
docker run ansible
Archivo Docker Compose (docker-compose.yml)
# docker-compose.yml
version: ‘3’
services:
web:
image: ‘mmumshad/simple-webapp’
database:
image: ‘mongodb’
messaging:
image: ‘redis:alpine’
orchestration:
image: ‘ansible’
Este archivo describe los servicios que desea ejecutar (web, base de datos, mensajería, orquestación), sus respectivas imágenes y cualquier configuración adicional.
Para iniciar todos estos servicios juntos:
docker-compose up
Docker Compose se encarga de iniciar todos los contenedores definidos en el archivo docker-compose.yml.
Construir con Docker Compose
También puedes construir imágenes usando Docker Compose:
docker-compose build
Este comando construye las imágenes especificadas en el archivo docker-compose.yml.
Ejecutar contenedores enlazados
Si fueras a ejecutar contenedores individuales con vinculación:
docker run -d –name redis redis
docker run –name voting-app -p 5000:80 –link redis:redis voting-app
docker run –name result-app -p 5001:80 –link db:db result-app
docker run -d –name worker –link db:db –link redis:redis worker
En Docker-Compose
# docker-compose.yml
version: ‘3’services:
vote:
image: ‘voting-app’
ports:
– ‘5000:80’
links:
– ‘redis:redis’
result:
image: ‘result-app’
ports:
– ‘5001:80’
links:
– ‘db:db’
worker:
image: ‘worker’
links:
– ‘db:db’
– ‘redis:redis’
db:
image: ‘db’
redis:
image: ‘redis’
Docker Compose te permite describir toda su pila de aplicaciones en un único archivo, lo que facilita la gestión, ejecución y conexión de diferentes servicios. Es como si escribieras todas las tareas de tu evento en un plan, y luego Docker Compose se encarga de la configuración por ti.
Docker Registry
Jn Registro Docker es un lugar donde la gente almacena y comparte sus imágenes Docker, facilitando a otros el uso y ejecución de su software. Es como una gran biblioteca online para programas que pueden ser fácilmente descargados y utilizados en diferentes ordenadores.
Conceptos básicos del Registro Docker:
Registro Público:
Las imágenes Docker pueden ser almacenadas y compartidas en registros públicos como Docker Hub.
Ejemplo:
docker pull nginx
Registro Privado:
A veces, es posible que desee mantener sus imágenes en su propio registro privado.
Ejemplo:
docker login registro-privado.io
– Ejecuta un contenedor desde una imagen en el registro privado:
docker run private-registry.io/apps/internal-app
«`
Despliega tu propio registro privado:
Puede desplegar su propio registro privado para su equipo o empresa.
Ejemplo:
Ejecute un registro privado en su equipo:
docker run -d -p 5000:5000 –name registry registry:2
«`
{% endraw %}
– Tag your image for the private registry:
{% raw %}
docker image tag my-image localhost:5000/my-image
docker push localhost:5000/my-image
Extracción desde un registro privado remoto:
También puede extraer imágenes de un registro privado remoto utilizando su dirección IP o dominio.
Ejemplo:
docker pull 192.168.56.100:5000/mi-imagen
Un Registro Docker es como un espacio de almacenamiento donde la gente guarda y comparte sus imágenes Docker. Puedes utilizar registros públicos para imágenes ampliamente utilizadas o configurar tu propio registro privado para tus necesidades específicas. Es como una biblioteca especial para compartir y almacenar planos de software (imágenes).
Docker Engine
Imagina que tienes una caja mágica (Docker Engine) que puede ejecutar y gestionar todo tipo de programas (contenedores) por ti. Docker Engine es como el cerebro de esta caja mágica.
Docker Daemon
El Daemon es como el cuidador de la caja mágica. Siempre está ahí, listo para recibir instrucciones y asegurarse de que todo funciona sin problemas.
API REST
Piensa en la API REST como un conjunto de reglas que te permiten hablar con la caja mágica. Es como un lenguaje que usted y el Daemon utilizan para comunicarse. Le dices al Daemon lo que tiene que hacer, y lo entiende porque estáis hablando el mismo idioma.
Docker CLI (Interfaz de Línea de Comandos):
La CLI de Docker es como una varita mágica que usas para dar órdenes al Daemon. Escribes los comandos y el Daemon sigue tus instrucciones. Es como decir «Abracadabra» para hacer que las cosas sucedan.
Conexión a un motor Docker remoto
Conectarse a un motor Docker remoto te permite controlar contenedores en otra máquina, y establecer restricciones asegura que los contenedores usen sólo los recursos especificados.
IP del Host Docker
Puedes conectarte a un motor Docker en una máquina diferente usando su dirección IP y puerto.
Ejemplo:
docker -H=remote-docker-engine:2375 run nginx
Esto le dice a su CLI Docker local para comunicarse con un motor Docker remoto.
Ejecutar contenedores con restricciones
Docker te permite establecer restricciones de recursos para los contenedores, como límites de CPU y memoria.
Ejemplo:
docker run –cpus=0.5 ubuntu
docker run –memory=100m ubuntu
Estos comandos limitan el contenedor a utilizar sólo medio núcleo de CPU y 100 megabytes de memoria.
Espacio de nombres PID
El espacio de nombres PID te permite crear un área separada para procesos (como programas o tareas) en un contenedor, para que tengan su propio conjunto de «números de ticket» (Process IDs) que no choquen con procesos fuera del contenedor.
Código de ejemplo:
Ejecución de un contenedor con espacio de nombres PID de host:
Esto significa que el contenedor comparte los mismos «números de ticket» que el host.
docker run –pid=host ubuntu
Ejecutar un contenedor con espacio de nombres PID aislado
Esto significa que el contenedor tiene su propio conjunto de «números de ticket» separados del host.
docker run –pid=container ubuntu
En el primer ejemplo, el contenedor interactúa con los procesos como si estuviera en el mismo espacio que el host. En el segundo ejemplo, el contenedor tiene su propio espacio aislado para los procesos. Es como tener un área privada en un gran evento donde tu grupo tiene su propio conjunto de números de tickets, permitiéndote hacer cosas independientemente del resto del evento.
Conceptos de contenedorización
Espacio de nombres de ID de proceso:
Los contenedores tienen su propio espacio aislado de ID de proceso (PID), por lo que los procesos dentro de un contenedor están separados de los que están fuera.
Ejemplo:
docker run –pid=host ubuntu
– Este comando ejecuta un contenedor con el espacio de nombres PID del host, por lo que comparte los mismos procesos.
Espacio de nombres de red:
Los contenedores también tienen su propio espacio de nombres de red aislado, lo que significa que pueden tener sus propias configuraciones de red.
Ejemplo:
docker run –net=host nginx
– Este comando ejecuta un contenedor con el espacio de nombres de red del host.
Espacio de nombres de tiempo compartido Unix:
Este espacio de nombres permite a los contenedores tener su propia visión del tiempo, separada del host y de otros contenedores.
Ejemplo:
docker run –uts=host ubuntu
– Este comando ejecuta un contenedor con el espacio de nombres Unix de tiempo compartido del host.
Espacio de nombres de montaje entre procesos:
El espacio de nombres de montaje aísla el sistema de archivos, permitiendo a los contenedores tener su propia vista del sistema de archivos.
Ejemplo:
docker run –mount=type=bind,source=/host/carpeta,target=/contenedor/carpeta ubuntu
– Este comando monta una carpeta del host en el contenedor.
Por supuesto. Simplifiquemos el concepto de cgroups:
Cgroups
Los cgroups (abreviatura de grupos de control) ayudan a gestionar y distribuir los recursos del sistema, como CPU y memoria, entre diferentes procesos o contenedores. Aseguran que ningún proceso o contenedor utilice todos los recursos disponibles, manteniendo todo equilibrado.
Código de ejemplo:
Estableciendo el Límite de CPU con Cgroups:
Esto es como decir que cada invitado a la fiesta sólo puede comer una cierta cantidad de comida.
docker run –cpus=0.5 ubuntu
Esto limita el contenedor a utilizar sólo la mitad de un núcleo de CPU.
Establecer límite de memoria con Cgroups:
Esto es como decir que cada invitado sólo puede ocupar una cierta cantidad de espacio en la pista de baile.
docker run –memory=100m ubuntu
Esto limita el contenedor a utilizar sólo 100 megabytes de memoria.
El concepto de Contenedores Linux y Contenedores Windows
Contenedores Linux (por defecto):
Los contenedores Linux son una forma de empaquetar y ejecutar software junto con todo lo que necesita, y son más cómodos en ordenadores que ejecutan Linux.
Contenedores Windows:
Los contenedores Windows son una forma de empaquetar y ejecutar software, al igual que los contenedores Linux, pero están diseñados para funcionar en ordenadores que ejecutan Windows.
Conceptos básicos de los contenedores Windows:
Tipos de contenedores:
- Los contenedores de Windows son de dos tipos principales: Windows Server Core y Nano Server.
- Windows Server Core: Piense en él como un contenedor más completo, adecuado para una gran variedad de aplicaciones.
- Nano Server: Piense en él como un contenedor ligero, diseñado para casos de uso específicos y minimalistas.
Imágenes base:
Las imágenes base son como el lienzo en blanco con el que empiezas al crear un contenedor.
Ejemplo:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
– Este comando extrae la imagen base de Windows Server Core.
– Ejemplo:
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2019
– Este comando extrae la imagen base de Nano Server.
Entornos compatibles
Windows Los contenedores pueden ejecutarse en versiones específicas del sistema operativo Windows.
Ejemplo:
Los contenedores de Windows se pueden ejecutar en Windows Server 2016.
– Ejemplo:
– Puedes ejecutar contenedores Windows en Windows 10 Professional y Enterprise, con Hyper-V Isolated Containers para un aislamiento adicional.
Container orchestration
Una orquestación de contenedores es una forma de gestionar y coordinar múltiples contenedores, asegurándose de que funcionan juntos a la perfección para ejecutar aplicaciones, igual que un gestor superinteligente se asegura de que todos los robots trabajan juntos para construir una torre perfecta.
¿Por qué orquestación?
- Muchas tareas, un gestor: Imagina que tienes muchos robots (contenedores) haciendo diferentes trabajos. La orquestación es como tener un gestor superinteligente (orquestador) que le dice a cada robot lo que tiene que hacer y se asegura de que todo se desarrolle sin problemas.
- Coherencia: La orquestación garantiza que todas las tareas se realicen siempre de la misma manera. Es como tener un conjunto de instrucciones que los robots deben seguir para garantizar la coherencia de sus acciones.
- Eficacia: La orquestación ayuda a optimizar las tareas, asegurándose de que los recursos (como el tiempo y los materiales) se utilizan de forma eficiente. Es como un gestor que se asegura de que todos los robots trabajan juntos sin malgastar energía.
- Ampliación: Cuando necesites hacer más trabajo, la orquestación puede crear fácilmente robots adicionales (contenedores). Es como convocar mágicamente a más robots para que ayuden cuando hay mucho que hacer.
- Fiabilidad: La orquestación garantiza que las tareas se completen de forma fiable, incluso si falla un robot (contenedor). Es como tener un plan de reserva para asegurarse de que el trabajo se realiza pase lo que pase.
- Coordinación: La orquestación coordina las tareas, asegurándose de que los robots trabajan juntos a la perfección. Es como si el director se asegurara de que cada robot conoce su función y colabora para lograr el éxito.
Código de Orquestación de Contenedores
# Crear un servicio Docker con 100 réplicas (instancias) de una aplicación Node.js
docker service create –replicas 100 –name my-nodejs-app nodejs
En este ejemplo
- docker service create: Este comando le dice a Docker que cree un servicio, que es un grupo de contenedores en ejecución.
- –replicas 100: Esta bandera especifica que desea 100 instancias (réplicas) de su servicio.
- –name my-nodejs-app: Esta bandera le da un nombre a tu servicio, en este caso, «mi-nodejs-app».
- nodejs: Esta es la imagen o receta para tu aplicación Node.js. Es como el plano para hornear magdalenas.
Así, este simple código es como decirle a tu mágico ayudante de chef (Docker Swarm) que cree 100 réplicas de tu aplicación Node.js, asegurándote de que tienes un montón de contenedores funcionando y listos para servir.
Docker Swarm
Docker Swarm es una herramienta que ayuda a coordinar y administrar un grupo de computadoras (nodos) para que trabajen juntas como un equipo de robots, permitiéndoles implementar y ejecutar múltiples contenedores de manera coordinada. Es como tener un administrador jefe de robots asegurándose de que todos los robots individuales construyan juntos algo grande y sorprendente.
Configurando Docker Swarm
Gerente de enjambre:
Imagina que tienes un robot jefe (Swarm Manager) que lidera el equipo. El robot principal decide qué se debe hacer y dirige a los otros robots (nodos) sobre cómo trabajar juntos.
# Iniciar Docker Swarm en Swarm Manager
docker swarm init
Trabajador de nodo:
Ahora tienes robots trabajadores (Node Workers) listos para unirse al equipo. El Swarm Manager comparte un código especial (token) para invitarlos a trabajar juntos.
# Unirse a un trabajador de nodo al Docker Swarm
docker swarm join –token <token> <Swarm Manager IP>
Servicio Docker Swarm
Ahora que tienes un equipo coordinado, quieres crear un servicio, como construir torres con tu equipo de robots:
# Crear un servicio Docker (un grupo de contenedores) con 3 réplicas (instancias)
docker service create –replicas 3 –network frontend –name my-web-server my-web-image
- –replicas 3: esta bandera le indica a Docker que cree tres instancias (réplicas) de su servicio.
- –network frontend: esta bandera especifica que su servicio pertenece a una red llamada «frontend».
- –name mi-servidor-web: Esto le da un nombre a su servicio, en este caso, «mi-servidor-web».
- my-web-image: Esta es la imagen o plano de su servidor web. Es como la receta para construir las torres.
Configuras el equipo de robots con un jefe (Swarm Manager) y robots trabajadores (Node Workers). Luego, les indica que creen un servicio (grupo de contenedores) que ejecute su aplicación de servidor web. El robot principal se asegura de que se creen tres réplicas de su servidor web y se conecten a la red «frontend». Es como tener un administrador jefe de robots supervisando la construcción de múltiples torres (contenedores) con la ayuda de los robots trabajadores.
Fuentes: