=[Docker SecDevOps] Capítulo 5 : Docker Swarm * gestor de servidores y orquestación embebido en el motor de docker * managers y workers * cuando se define un servicio, se define el estado (replicas) y docker swarm se encarga de mantenerlo en ese estado. * stack: conjunto de servicios desplegados de forma coordenada en swarm * nodos: (nodo docker) instancia motor docker correiendo en un swarm. Los nodos master distribuyen las tareas entre los nodos workers. * tareas: definición de una tarea que se ejecuta en un worker. * = contenedor * servicios globales: servicios que se desplegan en todos los workers del swarm. * una vez asignado a un nodo, no se puede mover (a menos que falle y de hecho, se manda una nueva tarea al nuevo nodo) * balanceador de carga: docker swarm dispone de un balanceador de carga y DNS interno para el reparto de la carga de trabajo == creando un swarm * docker swarm init --advertise-addr 192.168.99.100 * visualizar nodos (desde manager): docker node ls == manejando servicios * ''docker service'' * create * inspect * logs * ls * ps * rm * rollback * scale * update * docker service create --replicas=2 --name webserver nginx:alpine * docker service ls * escalar un servicio (subir o bajar el número de réplicas):docker service scale webserver=1 * para saber en que nodo se está ejecutando:docker service ps webserver == manejando nodos * ''docker node'' * demote * inspect * ls * promote * ps * rm * update * demote/promote: degradar o promocionar un nodo de master->worker o worker-> master (en caso de que falle el master)(queda marcado como **Reachable** * se puede marcar un nodo en tres estados para recibir tareas a través de ''docker nide update --availability '': * **active**: puede recibir nuevas tareas * **pause**: no puede recibir nuevas tareas, pero las ya activas continuan ejecutándose * **drain**: no puede recibir nuevas tareas y las actuales son paradas. Para tareas de manenimiento == stacks * equivalente **compose** para swarm (de hecho, usan el mismo tipo de configuración desde la v3) * se añade **replicas** * ''docker stack'' * deploy * ls * ps * rm * services * ''docker stack deploy -c docker-compose.yml mystack'' * ''docker stack ps mystack'' * visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet * **dockersamples/visualizer:stable** muestra el estado de los nodos del swarm -> ''docker pull dockersamples/visualizer'' == configuraciones y secretos * configuración: texto plano * secretos: encriptados y solo disponibles para los servicios asociados. * solo disponibles en swarm (se podría hacer con ''replica=1'' * no pueden superar los 500kb * ''docker config'' o ''docker secret'' * create * inspect * ls * rm * ''echo "mi secreto" | docker secret create misecreto -'' * ''echo "mi configuración" | docker secret create miconfig -'' * solo aceptan entradas desde **stdin** * ''docker service create --name nynginx --config miconfig --secret misecreto nginx:alpine'' * las configuraciones se almacenan por defecto como fichero en el //root// del contenedor * los secretos se almacenan por defecto como fichero en el **/run/secrets** del contenedor * ''docker service create --name nynginx --config src=miconfig,target=/alternate/my_config --secret src:misecreto,target:/alternate_secret/mysecret nginx:alpine'' == limpieza * nodo worker: ''docker swarm leave'' * nodo master: ''docker node demote nodo_master && docker swarm leave'' * ''docker swarm leave --force'' <- no recomendado