Appearance
Docker Swarn
Docker Swarn es una herramienta de orquestación nativa de Docker que permite gestionar múltiples contenedores desplegados en varios servidores (nodos) como si fueran un solo sistema. Esto facilita la implementación, escalado y administración de aplicaciones en contenedores.
Se utiliza para crear y administrar un clúster de nodos Docker, donde cada nodo puede ejecutar uno o más contenedores. Docker Swarm proporciona características como balanceo de carga, descubrimiento de servicios, alta disponibilidad y escalabilidad automática en un grado apropiado (distinto para volúmentes de grandes empresas).
Este documento tiene un alcance sencillo y ágil a modo de abre bocas.
Instalación y configuración inicial
Requisitos previos
Docker Swarm viene incluido con Docker Engine, por lo que no requiere instalación adicional:
bash
# Verificar que Docker esté instalado
docker --version
# Verificar que Swarm esté disponible
docker swarm --helpInicializar el cluster
bash
# Inicializar Swarm en el nodo manager
docker swarm init --advertise-addr <IP_DEL_MANAGER>
# Ejemplo con IP específica
docker swarm init --advertise-addr 192.168.1.100
# Para una sola máquina (desarrollo)
docker swarm initAgregar nodos worker
bash
# En el nodo manager, obtener el token
docker swarm join-token worker
# En los nodos worker, ejecutar el comando mostrado
docker swarm join --token SWMTKN-1-xxx... 192.168.1.100:2377Comandos básicos
bash
# Ver nodos del cluster
docker node ls
# Ver servicios
docker service ls
# Ver tareas de un servicio
docker service ps <service_name>
# Salir del swarm
docker swarm leave --forceEjemplo de archivo Docker Compose para Swarm
Crear docker-compose.yml:
yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == worker
networks:
- webnet
api:
image: node:alpine
command: |
sh -c "echo 'const http = require(\"http\");
const server = http.createServer((req, res) => {
res.writeHead(200, {\"Content-Type\": \"application/json\"});
res.end(JSON.stringify({message: \"Hello from \" + require(\"os\").hostname()}));
});
server.listen(3000, () => console.log(\"API running on port 3000\"));' > app.js && node app.js"
ports:
- "3000:3000"
deploy:
replicas: 2
restart_policy:
condition: on-failure
networks:
- webnet
redis:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
networks:
- webnet
networks:
webnet:
driver: overlay
volumes:
redis-data:
driver: localDesplegar el stack
bash
# Desplegar el stack
docker stack deploy -c docker-compose.yml myapp
# Ver servicios del stack
docker stack services myapp
# Ver tareas del stack
docker stack ps myapp
# Escalar un servicio
docker service scale myapp_web=5
# Actualizar un servicio
docker service update --image nginx:latest myapp_web
# Eliminar el stack
docker stack rm myappEjemplo sencillo paso a paso
1. Inicializar Swarm
bash
docker swarm init2. Crear servicio simple
bash
# Crear servicio web con 3 réplicas
docker service create \
--name web \
--replicas 3 \
--publish 8080:80 \
nginx:alpine
# Verificar el servicio
docker service ls
docker service ps web3. Escalar el servicio
bash
# Escalar a 5 réplicas
docker service scale web=5
# Verificar escalado
docker service ps web4. Actualizar el servicio
bash
# Actualizar imagen
docker service update --image nginx:latest web5. Limpiar
bash
# Eliminar servicio
docker service rm web
# Salir del swarm
docker swarm leave --forceConfiguración de red
bash
# Crear red overlay
docker network create --driver overlay mynetwork
# Listar redes
docker network ls
# Crear servicio en red específica
docker service create \
--name app \
--network mynetwork \
--replicas 2 \
nginx:alpineSecretos y configuraciones
bash
# Crear secreto
echo "mysecretpassword" | docker secret create db_password -
# Crear configuración
docker config create nginx_config nginx.conf
# Usar en servicio
docker service create \
--name webapp \
--secret db_password \
--config source=nginx_config,target=/etc/nginx/nginx.conf \
nginx:alpine¿Por qué continuar abordando Docker Swarm?
Para resumir, Docker Swarn nos ofrece...
- Simplicidad: Fácil de configurar y usar
- Integrado: Viene con Docker Engine
- Escalabilidad: Escalado automático de servicios
- Alta disponibilidad: Tolerancia a fallos de nodos
- Balanceo de carga: Distribución automática de tráfico
- Rolling updates: Actualizaciones sin tiempo de inactividad
- Seguridad: Comunicación encriptada entre nodos
Docker Swarm es ideal para equipos que buscan orquestación simple sin la complejidad de Kubernetes, perfecto para aplicaciones de tamaño medio y entornos de desarrollo.