15 enero, 2019

Ejecutar WMIC en equipos remotos de la red local (Windows Management Instrumentation)

Si nos surgen problemas para la ejecución sentencias WMIC en máquinas o nodos remotos, mostraré los errores más comunes y como solucionarlos.

Un error puede ser que no esté habiliado las llamadas a procedimientos remotos (RPC).
Error:
Descripción = El servidor RPC no está disponible.
Error - "El servidor RPC no está disponible" (wmic)
Figura 1: Error - "El servidor RPC no está disponible" (wmic).

Otro error común podría ser la falta de permisos para ejecutar WMIC en nodos remotos.
Error:
Descripción = Acceso denegado.
Error - "El servidor RPC no está disponible" (wmic)
Figura 2: Error - "Acceso denegado" (wmic).

Comprobar que el servicio "Instrumental de administración de Windows" (Winmgmt) está habilitado en el tipo de inicio automático y esté en ejecución.

Servicios winmgmt (wmic) en Windows
Figura 3: Servicios winmgmt (wmic) en Windows.

Habilitar la regla por aplicaciones permitidas del firewal (WFAS) de Windows para permitir comunicaciones y llamadas RPC de WMI. Dependiendo cada caso si se trata de una red privada o de dominio.

Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI
Figura 4: Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI.

Verificar que el uso compartido de archivos e impresoras esté activado para el tipo de red según sea el caso. Por defecto en una red de dominio esta característica suele estar activada por defecto cuando un equipo cliente se uno al dominio.

Activar el uso de recurso compartido de archivos e impresoras
Figura 5: Activar el uso de recurso compartido de archivos e impresoras.

Comprobar que en la consola del equipo remoto haiga permisos suficientes para el usuario que ejecutará wmic.

Esto se puede modificar en la consola de Microsoft "wmimgmt.msc", en la pestaña de seguridad, se modifican los permisos para permitir la "Llamada remota habilita" y "Ejecutar métodos".

Permisos de seguridad al Control WMI
Figura 6: Permisos de seguridad al Control WMI.

Por último, y algo fundamental según las pruebas que he realizado, es que independientemente de si el equipo cliente remoto en el que se quiere ejecutar WMI forme parte de una red de dominio o una red privada. Será necesario crear un valor en el registro de Windows "LocalAccountTokenFilterPolicy" algo ya comentado en este artículo.

Desde mi punto de vista esto no es aconsejable a métodos de seguridad, no es para nada una buena práctica, pero si se trata de casos puntuales en los que se necesita realizar una serie de acciones remotas simplemente, por seguridad aconsejo volver a eliminar este valor del registro.

Para poder ejecutar este valor en el registro podemos hacerlo ejecutando una CMD en el equipo remoto a través de PsExec (PsTools de Sysinternals). En este artículo hay se detalla como hacerlo.

El valor LocalAccountTokenFilterPolicy se trata básicamente de "deshabilitar" el UAC (User Account Control) para la ejecución de acciones remotas.

Para añadir el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Para posteriormente eliminar el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

En el siguiente ejemplo se puede ver como se ejecuta WMIC remotamente desde un equipo local a un equipo remoto usando "wmic /node", especificando la dirección IP local o el hostname del equipo remoto y un usuario/password con privilegios administrativos en la máquina remota.
wmic /node:ip_hostname /user:usuario /password:password bios get serialnumber
Ejecución remota de "wmic /node"
Figura 7: Ejecución remota de "wmic /node".

Saludos!

10 enero, 2019

Ejecutar una CMD en un equipo remoto [psexec]

Esto es algo que suelo utlizar en muchos casos cuando los servicios para administraciones remotas que necesito en ese momento no están habilitados en el equipo remoto.

O bien me conecto con este tip para ejecutar una CMD en el equipo remoto y habilitar los servicios que sean necesarios para posteriormente administrar el equipo remoto de forma más cómoda a través del registro remoto (regedit) o los snap-ins MSC (administrador de dispositivos, impresoras, firewall, servicios, etc.) de administración remota añadidos a través de una MMC (Microsoft Management Console).

Como levantamos una CMD con privilegios administrativos ya sea de un administrador local o de dominio podemos ejecutar acciones remotas mediante la consola, "netsh" para la administración de redes o Firewall, "sc" para servicios, "reg" para la manipulación de entradas del registro, "wmic" instrumental de administración de Windows, etc. Aunque como comentaba anteriormente es más cómodo invocar las propias consolas de administración remotas MSC de Microsoft.

Para esto será necesario descargar psexec, parte de la colección de herramientas de Sysinternals de Microsoft.

Haciendo uso de PsExec ejecutamos lo siguiente en una CMD con privilegios de nuestro equipo local.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
  • EquipoRemoto: nombre o IP del equipo remoto al que nos queremos conectar.
  • UserAdmin: usuario con privilegios de administrador local o de dominio sobre la máquina remota.
  • Password: Passoword del usuario establecido anteriormente.
  • Seguidamente indicamos la aplicación a ejecutar de forma remota, en este caso sería una CMD remota, por lo tanto "cmd.exe".

En la siguiente captura se puede ver un ejemplo y una comprobación consultando las IPs y un whoami de como realmente estamos estamos dentro del equipo remoto.
Ejecución de una CMD en un equipo remoto con psexec
Figura 1: Ejecución de una CMD en un equipo remoto con psexec.

Saludos!

27 diciembre, 2018

Transferir roles FSMO Windows Server y hacer purgado de los servicios del dominio

Los roles de maestros de operaciones FSMO (Flexible Single Master Operations) es una característica de Active Directory. Se trata de un conjunto de tareas de un controlador de dominio usadas principalmente para la replicación entre controladores de dominio.

Existen 5 roles FSMO en un Active Directory:
  • Schema Master (Maestro de Esquema). Uno por Bosque.
  • Domain Naming Master (Maestro de Nomenclatura de Dominios). Uno por Bosque.
  • RID Master - Relative Identifier Master (Maestro Identificador Relativo). Uno por Dominio.
  • Infrastructure Master (Maestro de Infraestructura). Uno por Dominio.
  • PDC Emulator - Primary Domain Controller Emulator (Maestro Controlador Principal de Dominio). Uno por Dominio.

Figura 1: 5 Roles FSMO en Active Directory.


Comprobar el estado de los controladores de dominio

dcdiag (Domain Controller Diagnostic Tool) es una herramienta con la que podemos analizar el estado de los controladores de dominio de un bosque, ejecutando una serie de verificaciones se podrá diagnosticar su funcionamiento.

En el siguiente caso vemos el resultado del análisis en un bosque en el que existen dos controladores de dominio, uno de ellos está activo (SrvDominio Windows Server 2016) y el otro inactivo (apagado, Windows Server 2008 R2).
C:\>dcdiag
... ...

   Probando servidor: Nombre-predeterminado-primer-sitio\SRVDOMINIO
      Iniciando prueba: Advertising
         Advertencia: SRVDOMINIO no se está anunciando como un servidor horario.
         ......................... SRVDOMINIO no superó la prueba Advertising
      Iniciando prueba: FrsEvent
         Existen eventos de advertencia o de error en las últimas 24 horas después de compartir SYSVOL. Los problemas
         de replicación de SYSVOL incorrecta pueden ocasionar problemas de la directiva de grupo.
         ......................... SRVDOMINIO superó la prueba FrsEvent
      Iniciando prueba: DFSREvent
         ......................... SRVDOMINIO superó la prueba DFSREvent
      Iniciando prueba: SysVolCheck
         ......................... SRVDOMINIO superó la prueba SysVolCheck
      Iniciando prueba: KccEvent
         ......................... SRVDOMINIO superó la prueba KccEvent
      Iniciando prueba: KnowsOfRoleHolders
         [ADCONTROL1] Error en DsBindWithSpnEx(): 1722,
         El servidor RPC no está disponible..
         Advertencia: ADCONTROL1 es Schema Owner, pero no responde al enlace RPC de DS.
         Error en la búsqueda de atributos con capacidad de búsqueda LDAP en el servidor ADCONTROL1. Valor devuelto =
         81
         Advertencia: ADCONTROL1 es Schema Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Domain Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Domain Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es PDC Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es PDC Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Rid Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Rid Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Infrastructure Update Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Infrastructure Update Owner, pero no responde al enlace LDAP.
         ......................... SRVDOMINIO no superó la prueba KnowsOfRoleHolders

... ...


Transferir roles FSMO entre Domain Controller

netdom es una utilidad de línea de comandos para la administración de Active Directory y Relaciones de confianza.

Listar los roles FSMO

netdom query fsmo
netdom query fsmo
Figura 2: netdom query fsmo

ntdsutil es una utilidad de línea de comandos para la administración de ADDS (Active Directory Domain Services).

Transferir ROLES de un servidor activo a uno nuevo (de ADCONTROL1 a SRVDOMINIO)
C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server SrvDominio
Enlazando a SrvDominio ...
Conectado a SrvDominio usando credenciales de usuario conectado localmente.
server connections: q
fsmo maintenance: transfer naming master
fsmo maintenance: transfer infrastructure master
fsmo maintenance: transfer PDC
fsmo maintenance: transfer RID master
fsmo maintenance: transfer schema master
fsmo maintenance: q
ntdsutil: q

Transferir ROLES de un servidor inactivo (apagado) a uno activo (de ADCONTROL1 a SRVDOMINIO)
C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server SrvDominio
Enlazando a SrvDominio ...
Conectado a SrvDominio usando credenciales de usuario conectado localmente.
server connections: q
fsmo maintenance: seize naming master
fsmo maintenance: seize infrastructure master
fsmo maintenance: seize PDC
fsmo maintenance: seize RID master
fsmo maintenance: seize schema master
fsmo maintenance: q
ntdsutil: q

Una vez transferidos los roles FSMO volvemos a comprobar su estado y que se transfirieron correctamente.

netdom query fsmo
Figura 3: netdom query fsmo

Purgado de servicios en el caso un DC que ya no vaya estar operativo en el dominio

Si se trata de un servidor que ya no estará operativo en el bosque habrá que limpiar o "purgar" el resto de servicios que puedan estar asociados al DC viejo.

1. Limpiar regisitros DNS

Eliminar todos los registros que apunten al DC viejo en toda la gerarquía del Administrador de DNS.

eliminar registros dns dc viejo fsmo
Figura 4: Eliminar registros DNS del DC viejo.

2. Limpiar Sitios y Servicios de Active Directory

Eliminar el servidor DC viejo de "Sistios y Servicios de Active Directory".

eliminar registros sitios y servicios de active directory dc viejo fsmo
Figura 5: Eliminar registros de "Sistios y servicios de Active Directory".

3. Limpiar Active Directory

Eliminar los objetos de equipos de las OU (Organizational Unit) Computers y Domain Controllers.

eliminar cuentas y objetos de active directory dc viejo fsmo
Figura 6: Eliminar los DC de Active Directory.

4. Cambiar opciones del servicio DHCP

En el caso de tener el rol del servicio DHCP instalado, eliminar de los servidores DNS de las Opciones de ámbito la dirección IP del DC viejo.

eliminar opciones servidores dns del servidor dhcp dc viejo fsmo
Figura 7: Eliminar IP del DC del servicio DHCP.

5. Cambiar direcciones DNS a los equipos de la red interna

Cambiar las direcciones DNS al resto de máquinas de la red interna con ip estática definida Windows o Linux ya sean servidores o equipos clientes.

Saludos!

11 diciembre, 2018

Comandos Docker [Guía de referencia]

Llevo una temporada trabajando con el sistema de contenedores de Docker, poco a poco fuí recopilando los comandos de Docker que iba utilizando a través de su web oficial.

Cree un repositorio para irlo actualizando paulatinamente con la referencia de estos comandos de Docker.

En la medida de lo posible iré actualizando esta entrada con el nuevo contenido que vaya incorporando al repositorio de Github.

Instalación Docker en Ubuntu 18.04

Instalación Docker

Actualizar los repositorios existentes.
sudo apt update
Instalar paquetes previos que permitan a apt usar paquetes a través de HTTPS.
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Agregar la clave GPG del repositorio oficial de Docker.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Agregar el repositorio de Docker en las fuentes de APT.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
Finalmente, se instala Docker.
sudo apt install docker-ce
Se comprueba que el daemon de Docker está iniciado y el proceso está habilita para iniciarse en el arranque.
sudo systemctl status docker
Si no estuviese iniciado y/o habilitado para el arranque del sistema.
sudo systemctl start docker
sudo systemctl enable docker


Ejecutar el comando Docker sin sudo o desde otro usuario

De forma predeterminada el comando Docker solo puede ser ejecutado por el usuario root o por un usuario del grupo docker. Donde “username” sería el nombre del usuario.
sudo usermod -aG docker username
Para comprobar que el usuario forma parte del grupo docker se pude ejecutar.
id -nG


Referencia de comandos Docker

https://docs.docker.com/engine/reference/commandline/docker

Comandos gestión Docker

Listar contenedores en ejecución. Listar todos los contenedores en ejecución y parados (-a indica todos).
docker ps –a
Listar imágenes descargadas en local (-a muestra todas las imágenes incluidas las intermedias).
docker images
Descargar imagen a caché local desde un repositorio público.
docker pull ubuntu:18.04
Loguearse en Docker Hub, será necesario estar autenticado para subir (push) una imagen.
docker login
docker login -u <usuario> -p <password>
Subir una imagen a un repositorio (Docker Hub).
docker push <imagen_local>
Crear una imagen de un contenedor personalizado en ejecución.
docker commit <ID o nombre_contenedor> <nombre_imagen_nueva>
Para subir una imagen creada a un repositorio como puede ser Docker Hub, es neecsario "tagearla" antes.
docker tag <imagen_local> <nombre_tag_imagen>
docker push <nombre_tag_imagen_creada>
Construir una imagen a partir de un Dockerfile (--file será necesario si el nombre del fichero no es "Dockerfile" y no está situado el mismo directorio).
docker build --tag <nombre_imagen> --file <fichero_dockerfile>
Eliminar una imagen local (-f o --force fuerza la eliminación).
docker rmi <id o nombre_imagen>
Eliminar un contenedor, si el contenedor está en ejecución será necesario detenerlo (docker stop ) antes de eliminarlo se puede indicar el parámetro -f o --force (esto fuerza la detención y eliminación del contenedor).
docker rm <id o nombre_imagen>
Eliminar todos contenedores, redes, imágenes o volúmenes "colgantes" sin referencia o no utilizados
docker system prune

#Parámetros
--all       #Eliminar todas las imágenes no utilizadas, no solo las que cuelgan.
--force     #Forzar el eliminado, no pedir confirmación.
--volumes   #Eliminar volúmenes no utilizados o colgantes.
--filter    #Proporcionar valores de filtro.

Crear e iniciar un contenedor basado en una imagen Ubuntu 18.04, que ejecuta una Shell en modo interactivo (-it) como entrypoint.
docker run –name <nombre_contenedor> -h <nombre_hostname> -it ubuntu:18.04 /bin/bash
Crear y ejecutar un contenedor con un comando/servicio en segundo plano un comando como entrypoint (-d modo detached, no interactivo) (-c comando dentro del modo interactivo bash).
docker run -d --name <nombre_contenedor> -h <hostname> <nombre_imagen> bash -c "<comando>"
docker run -d --name mi_web -h web ubuntu_web bash -c "apache2ctl -D FOREGROUND"
Crear e iniciar un contenedor en modo interactivo con una Shell (-i interactivo -t asociar una tty).
docker run -it --name test debian bash
Crear contenedores. El contenedor se crea pero no se inicia (sería necesario usar después docker start). “docker créate” dispone de multitud parámetros.
docker create -it --storage-opt size=120G fedora /bin/bash
Iniciar, detener y reiniciar contenedores.
docker start <id o nombre_imagen>
docker stop <id o nombre_imagen>
docker restart <id o nombre_imagen>
Publicar puertos en contenedores (aunque se ejecute una imagen que ya predefina exposición de puertos, igualmente habría que establecerlos en la ejecución del contenedor).
#Publicar el puerto 80 del contenedor en un puerto aleatorio del host.
docker run -it --name test -p 80 debian bash

#Publicar el puerto 80 del contenedor al 8080 del host.
docker run -it --name test -p 8080:80 debian test

#Publicar todos los puertos expuestos a puertos aleatorios del host.
docker run -it --name test -P debian bash
Listar los puertos de contenedores.
docker port <id o nombre_imagen>
Finalizar (matar) contenedores.
docker kill <id o nombre_imagen>
Buscar registros de logs de contenedores (-f muestra logs a tiempo real).
docker logs -f <id o nombre_imagen>
Mostrar los procesos en ejecución de contenedores.
docker top <id o nombre_imagen>
Buscar imágenes en repositorios (Docker Hub).
docker search <término>
Importar, exportar y guardar imágenes en un archivo tar.
docker save --outpout <nombre_contenedor> <nombre_empaquetado_contenido.tar>
docker export --output <nombre_contenedor> <nombre_empaquetado_contenido.tar>
docker import <nombre_empaquetado_contenido.tar> <nombre_contenedor>
Cargar una imagen desde un archivo tar o STDIN (Standard Input).
docker load --input <test.tar>
Gestionar Docker.
docker df                              #Mostrar el uso del disco docker.
docker system events o docker events   #Mostrar eventos en tiempo real.
docker system info o docker info       #Mostrar información de todo el sistema.
Desactivar procesos de contenedores.
docker unpause <id o nombre_imagen>
Actualizar la configuración de contenedores.
docker update <id o nombre_imagen>
Mostrar la versión de Docker.
docker version
Inspeccionar cambios de archivos o directorios de contenedores.
docker diff <id o nombre_imagen>
Inspeccionar contenedores (devuelve información de bajo nivel).
docker inspect <id o nombre_imagen>
Mostrar estadísticas de uso de los recursos de contenedores (CPU, Memoria, I/O, PIDs).
docker stats   #Muestra todos los contenedores actuales en ejecución.
docker stats <id o nombre_imagen>
Gestionar volúmenes Docker.
docker volume create    #Crear un volumen.
docker volume inspect   #Mostrar información detallada de volúmenes.
docker volume ls        #Listar volúmenes.
docker volume rm        #Eliminar volúmenes.
docker volume prune     #Eliminar volúmenes locales no utilizados.
Gestión de redes Docker.
docker network create       #Crear una red.
docker network connect      #Conectar un contenedor a una red.
docker network disconnect   #Desconectar un contenedor de una red.
docker network inspect      #Mostrar información detallada de redes.
docker network ls           #Listar redes.
docker network rm           #Eliminar redes.
docker network prune        #Eliminar todas las redes no utilizadas.
Montar un volumen de un directorio local en un contenedor (útil para trabajar con volúmenes de datos que se están editando habitualmente).
docker run -it -v /home/user/codigoWeb:/var/www/html debian bash
Crear un contenedor que usará un volumen asociado a otro contenedor existente.
#Crear el contenedor sin bash, simplemente para tenerlo como referencia para crear posteriormente otros contenedores basados en este usando su volumen de datos como referencia.
docker run -it -v /tmp:/var/www/html --name container_code debian /bin/false

#Asociar el volumen creado en el contenedor anterior con un nuevo contenedor usando el ID del contenedor.
docker run -it --name code -h code --volumenes-from ec3456a3d16cb debian bash
Copiar datos desde el contenedor al host local (opcional -a --archive copia toda la información uid/gid).
docker cp -a <id_contenedor>:<path_contenedor> <path_host_local>
Copiar desde el host local al contenedor.
docker cp -a <path_host_local> <id_contenedor>:<path_contenedor>
Ejecutar un comando en un contenedor en ejecución. Por ejemplo una Shell bash en modo interactivo (útil para acceder a un contenedor en ejecución).

https://docs.docker.com/engine/reference/commandline/exec
docker exec -it nombre_contenedor /bin/bash
○ Salir de un contenedor con bash interactivo
# Con la combinación de teclas: Ctrl+p+q
# exit: si el contenedor se inició en modo --detach o -d
○ Live restore Docker

Permite que los contenedores permanezcan en ejecución aunque el daemon no esté disponible (por ejemplo en un reinicio del daemon dockerd). Ayuda a reducir la inactividad del contenedor debido a fallas del daemon, interrupciones planificadas o actualizaciones.

https://docs.docker.com/config/containers/live-restore

Para habilitar es necesario crear el fichero “/etc/docker/daemon.json”, con el contenido.
{
  "live-restore": true
}
○ Iniciar contenedores automáticamente

Iniciar automáticamente un contenedor con “--restart always” se trata de una política de reinicio que siempre reinicia el contenedor si este se detiene (útil para auto iniciar el contenedor después de reiniciar la máquina host).
docker run -d --restart always --name test -h test debian

#Políticas de reinicio automático de contenedores
no               #No reinicia automáticamente el contenedor. (valor por defecto)
on-failure       #Reinicia el contenedor si sale debido a un error.
unless-stopped   #Reinicia el contenedor a menos que se detenga explícitamente o el propio Docker se detenga o reinicie.
always           #Siempre reinicia el contenedor si se detiene.


Comandos Docker Swarm

Referencia de comandos Docker Swarm.

https://docs.docker.com/engine/reference/commandline/swarm
https://docs.docker.com/engine/reference/commandline/swarm_update

Iniciar, unirse, dejar y actualizar un cluster Swarm.
docker swarm init         #Inicializar un Swarm.
docker swarm join         #Unirse a un Swarm como nodo worker y/o manager (dependiendo si se trata de un –token manager o worker).
docker swarm leave        #Dejar un Swarm.
docker swarm update       #Actualizar un Swarm, dispone de varias opciones.
docker swarm join-token   #Gestionar join tokens


Comandos Docker Machine

Referencia de comandos Docker Machine.

https://docs.docker.com/machine/reference
docker-machine create   #Crear un nodo.
docker-machine kill     #Detener una nodo.
docker-machine ls       #Listar nodos.
docker-machine ssh      #Iniciar sesión en un nodo activo.
docker-machine rm       #Eliminar un nodo.
docker-machine env      #Establecer variables de entorno para definir que docker debe ejecutar un comando en una máquina en particular.
Crear dos nodos usando driver de Amazon Web Services, estableciendo región y zona de disponibilidad, red VPC y tamaño de disco.
docker-machine create --driver amazonec2 --amazonec2-region "us-east-2" --amazonec2-zone "b" --amazonec2-vpc-id vpc-0d1dd38... --amazonec2-root-size 8 test


Comandos Docker Node

Referencia de comandos Docker Node.

https://docs.docker.com/engine/reference/commandline/node
docker node inspect   #Mostrar información detallada en uno o más nodos.
docker node ls        #Listar nodos del Swarm.
docker node ps        #Enumerar las tareas que se ejecutan en uno o más nodos.
docker node rm        #Eliminar uno o más nodos del Swarm.
docker node update    #Actualizar un nodo.
Promover un nodo worker a manager.
docker node promote <nodo>
Degradar un nodo manager a worker.
docker node demote <nodo>
Cambiar nodo a solo Manager y no Manager+Worker (que sería la función por defecto).
docker node update --availability drain <nodo>
○ Docker node update

Referencia de comandos Docker node update.

https://docs.docker.com/engine/reference/commandline/node_update
--availability   #Disponibilidad del nodo ("active"|"pause"|"drain").
--label-add      #Agregar o actualizar una etiqueta de nodo (key=value).
--label-rm       #Eliminar una etiqueta de nodo si existe.
--role           #Rol del nodo ("worker"|"manager").


Comandos Docker Service

Referencia de comandos Docker Service.

https://docs.docker.com/engine/reference/commandline/service
docker service create     #Crear un nuevo servicio.
docker service inspect    #Mostrar información detallada sobre uno o más servicios.
docker service logs       #Obtener los registros de un servicio o tarea.
docker service ls         #Listar servicios.
docker service ps         #Listar las tareas de uno o más servicios.
docker service rm         #Eliminar uno o más servicios.
docker service rollback   #Revertir cambios a la configuración de un servicio.
docker service scale      #Escalar uno o múltiples servicios replicados.
docker service update     #Actualizar un servicio.
Crear un servicio. Se debe crear desde un nodo manager.
--publish: Publicar puertos
--replicas: Número de réplicas totales a repartir entre los nodos existentes.
--update-parallelism: Ejecución del número de contenedores/tareas por nodo.
--update-delay: Retraso entre las actualizaciones (ms|s|m|h)
--restart-condition on-failure: Reiniciar la tarea en caso de fallo.
--constraint node.role manager: Los nodos solo admitirán tareas de un nodo manager
test: Imagen a ejecutar.
docker service create --name test -p 80:80 --replicas 3 --update-parallelism 1 --update-delay 5s --restart-condition on-failure --constraint 'node.role == manager' test
Otra forma de crear un servicio es añadiendo \ para un salto de línea y seguir definiendo los parámetros del servicio.
docker service create \
--name test \
--publish 80:80 \
--replicas 3 \
--update-parallelism 1 \
--update-delay 5s \
--restart-condition on-failure \
--constraint 'node.role == manager' \
test


Docker service update

Referencia de comandos Docker service update.

https://docs.docker.com/engine/reference/commandline/service_update

Actualizar réplicas de un Swarm de modo que se pueda controlar un escalado elástico.
docker service update --replicas=50 test
docker service scale test=50
Forzar actualización de un servicio, incluso si ningún cambio lo requiere. Útil para actualizar un cluster de nodos Swarm en los que se actualizaron réplicas en un servicio con un paralelismo concreto y Docker Swarm ignoró el balanceo de tareas (réplicas del servicio) a nuevos nodos worker unidos al Swarm.
docker service update --force test


Comandos Docker Stack

Referencia de comandos Docker Stack.

https://docs.docker.com/engine/reference/commandline/stack
docker stack deploy     #Implementar o actualizar un stack.
docker stack ls         #Lista de pilas.
docker stack ps         #Listar las tareas en la pila.
docker stack rm         #Eliminar una o más pilas.
docker stack services   #Listar los servicios en la pila.
Implementar o actualizar un stack a partir de un fichero “Docker-Compose”. Debe ejecutarse desde un nodo manager.
docker stack deploy --compose-file docker-compose.yml test
Saludos!
Entradas Relacionadas