Docker
Modo de enjambre Docker
Buscar..
Introducción
Un enjambre es un número de Docker Engines (o nodos ) que despliegan servicios colectivamente. Swarm se utiliza para distribuir el procesamiento en muchas máquinas físicas, virtuales o en la nube.
Sintaxis
Inicializar un enjambre : docker swarm init [OPCIONES]
Únase a un enjambre como nodo y / o administrador : enjambre de docker únase [OPCIONES] HOST: PUERTO
Cree un nuevo servicio : el servicio de la ventana acoplable crea [OPCIONES] IMAGEN [COMANDO] [ARG ...]
Visualice información detallada sobre uno o más servicios : servicio de la ventana acoplable inspeccionar [OPCIONES] SERVICIO [SERVICIO ...]
Lista de servicios : servicio docker ls [OPCIONES]
Elimine uno o más servicios : Servicio de la ventana acoplable SERVICIO [SERVICIO ...]
Escala uno o varios servicios replicados : escala de servicio de ventana acoplable SERVICE = REPLICAS [SERVICE = REPLICAS ...]
Enumere las tareas de uno o más servicios : servicio acoplable ps [OPCIONES] SERVICIO [SERVICIO ...]
Actualizar un servicio : actualización de servicio de docker [OPCIONES] SERVICIO
Observaciones
El modo enjambre implementa las siguientes características:
- Gestión de clústeres integrada con Docker Engine.
- Diseño descentralizado
- Modelo de servicio declarativo
- Escalada
- Reconciliación del estado deseado
- Redes multi-host
- Descubrimiento de servicio
- Balanceo de carga
- Diseño seguro por defecto
- Actualizaciones de rodadura
Para obtener más documentación oficial de Docker con respecto a Swarm visit: descripción general del modo Swarm
Comandos CLI en modo enjambre
Haga clic en la descripción de comandos para la documentación
docker swarm init [OPTIONS]
Unirse a un enjambre como nodo y / o administrador.
docker swarm join [OPTIONS] HOST:PORT
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Mostrar información detallada sobre uno o más servicios
docker service inspect [OPTIONS] SERVICE [SERVICE...]
docker service ls [OPTIONS]
docker service rm SERVICE [SERVICE...]
Escala uno o múltiples servicios replicados
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
Listar las tareas de uno o más servicios.
docker service ps [OPTIONS] SERVICE [SERVICE...]
docker service update [OPTIONS] SERVICE
Crea un enjambre en Linux usando docker-machine y VirtualBox
# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1
# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
docker swarm init \
--advertise-addr $(docker-machine ip manager)
--listen-addr $(docker-machine ip manager)
# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)
# Join a worker node with the worker token
docker-machine ssh worker1 \
docker swarm join \
--token $WORKER_TOKEN \
--listen-addr $(docker-machine ip worker1) \
$(docker-machine ip manager):2377
Averiguar trabajador y gerente unirse token
Al automatizar el aprovisionamiento de nuevos nodos en un enjambre, necesita saber cuál es el token de unión correcto para el enjambre, así como la dirección anunciada del administrador. Puede averiguarlo ejecutando los siguientes comandos en cualquiera de los nodos de administrador existentes:
# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 | tr -d '[[:space:]]')
# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)
La opción -q genera solo el token. Sin esta opción, obtienes el comando completo para registrarte en un enjambre.
Luego, en los nodos recién aprovisionados, puede unirse al enjambre utilizando.
docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS
Hola aplicación mundial
Por lo general, desearía crear una pila de servicios para formar una aplicación replicada y orquestada.
Una aplicación web moderna típica consiste en una base de datos, api, frontend y proxy inverso.
Persistencia
La base de datos necesita persistencia, por lo que necesitamos un sistema de archivos que se comparta entre todos los nodos de un enjambre. Puede ser NAS, servidor NFS, GFS2 o cualquier otra cosa. Configurarlo está fuera de alcance aquí. Actualmente Docker no contiene y no administra la persistencia en un enjambre. Este ejemplo asume que hay /nfs/
ubicación compartida montada en todos los nodos.
Red
Para poder comunicarse entre sí, los servicios en un enjambre deben estar en la misma red.
Elija un rango de IP (aquí 10.0.9.0/24
) y el nombre de la red ( hello-network
) y ejecute un comando:
docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--opt encrypted \
hello-network
Base de datos
El primer servicio que necesitamos es una base de datos. Usemos postgresql como ejemplo. Cree una carpeta para una base de datos en nfs/postgres
y ejecute esto:
docker service create --replicas 1 --name hello-db \
--network hello-network -e PGDATA=/var/lib/postgresql/data \
--mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
kiasaki/alpine-postgres:9.5
Tenga en cuenta que hemos utilizado las --network hello-network
y --mount
.
API
La creación de API está fuera del alcance de este ejemplo, así que supongamos que tiene una imagen de API bajo username/hello-api
.
docker service create --replicas 1 --name hello-api \
--network hello-network \
-e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
username/hello-api
Tenga en cuenta que hemos pasado un nombre de nuestro servicio de base de datos. El enjambre Docker tiene un servidor DNS de round-robin integrado, por lo que la API podrá conectarse a la base de datos utilizando su nombre DNS.
Proxy inverso
Creemos el servicio nginx para servir nuestra API a un mundo exterior. Cree archivos de configuración nginx en una ubicación compartida y ejecute esto:
docker service create --replicas 1 --name hello-load-balancer \
--network hello-network \
--mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
-p 80:80 \
nginx:1.10-alpine
Note que hemos usado la opción -p
para publicar un puerto. Este puerto estaría disponible para cualquier nodo en un enjambre.
Disponibilidad de nodos
Disponibilidad del nodo de modo de enjambre:
- Activo significa que el programador puede asignar tareas a un nodo.
- Pausa significa que el programador no asigna nuevas tareas al nodo, pero las tareas existentes siguen ejecutándose.
- Drenar significa que el programador no asigna nuevas tareas al nodo. El programador cierra todas las tareas existentes y las programa en un nodo disponible.
Para cambiar la disponibilidad del modo:
#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls
Promover o degradar nodos enjambre
Para promocionar un nodo o un conjunto de nodos, ejecute el programa de la docker node promote
desde un nodo administrador:
docker node promote node-3 node-2
Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.
Para degradar un nodo o conjunto de nodos, ejecute docker node demote
desde un nodo administrador:
docker node demote node-3 node-2
Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.
Dejando el enjambre
Nodo trabajador:
#Run the following on the worker node to leave the swarm.
docker swarm leave
Node left the swarm.
Si el nodo tiene el rol de administrador , recibirá una advertencia sobre el mantenimiento del quórum de administradores. Puede usar --force para salir en el nodo del administrador:
#Manager Node
docker swarm leave --force
Node left the swarm.
Los nodos que dejaron el Swarm seguirán apareciendo en la salida docker node ls
.
Para eliminar nodos de la lista:
docker node rm node-2
node-2