En el primer artículo, "Creación de un clúster de Docker Swarm en Azure Container Service", analizamos la creación de un clúster de Docker Swarm en Azure Container Service (ACS). Cada máquina virtual (maestra o agente) tiene Docker ejecutándose cuando se crea el Swarm. En este artículo de continuación, analizaremos el uso de Docker en el Swarm creado en Azure Container Service. Analizaremos el uso de Docker independiente y un servicio de modo Docker Swarm. Este artículo tiene las siguientes secciones:
- Configuración del entorno
- Lista de información de Docker
- Ejecución de una imagen de Docker Hello World
- Ejecutar una imagen de Nginx Docker
- Listado de contenedores Docker
- Acceso al contenedor Nginx Docker en un navegador
- Eliminar un contenedor Docker
- Inicializar el modo Docker Swarm
- Creación de un servicio Docker
- Listado de los servicios de Docker
- Listado de tareas de servicio de Docker
- Listado de contenedores Docker para el servicio Docker
- Exploración de registros generados por un contenedor de servicio de Docker
- Conclusión
Configuración del entorno
Use el mismo entorno que en el primer artículo, "Creación de un clúster Docker Swarm en Azure Container Service". Cree un clúster Swarm en ACS, como se describe en el artículo. En este artículo, utilizaremos el clúster Swarm que consta de tres nodos maestros y un nodo agente para ejecutar un contenedor Docker independiente y un servicio de modo Docker Swarm.
Información de ventana acoplable
Inicie Cloud Shell como se explica en el artículo "Creación de un clúster Docker Swarm en Azure Container Service". Conéctese a una máquina virtual maestra de Swarm utilizando una clave privada SSH RSA, un nombre de usuario y una dirección IP pública de la maestra, como se explicó también en el artículo anterior. El comando SSH para conectarse a la VM maestra es el siguiente; la clave privada SSH RSA, el nombre de usuario y la dirección IP pública serían diferentes para diferentes usuarios.
ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected]
Se establece una conexión y se muestra un símbolo del sistema para la máquina virtual maestra.
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2200 [email protected] a Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-65-genérico x86_64) * Documentación:https://help.ubuntu.com/ Información del sistema al martes 10 de octubre a las 22:40:17 UTC de 2017 Carga del sistema:0,27 Procesos:131 Uso de /:4,2 % de 28,80 GB Usuarios conectados:0 Uso de memoria :2 % de dirección IP para eth0:172.16.0.5 Intercambio de uso:0 % de dirección IP para docker0:172.17.0.1 Grafique estos datos y administre este sistema en:https://landscape.canonical.com/ Obtenga soporte en la nube con Ubuntu Advantage Cloud Invitado:http://www.ubuntu.com/business/services/cloud Nueva versión '16.04.3 LTS' disponible. Ejecute 'do-release-upgrade' para actualizarlo. Último inicio de sesión:martes 10 de octubre a las 22:40:17 de 2017 desde 40.78.30.37
Se configuraron tres nodos principales en el Swarm aprovisionado en el artículo "Creación de un clúster de Docker Swarm en Azure Container Service". La cantidad de máquinas virtuales maestras puede ser 1, 3 o 5. Cuando se ejecutan varias máquinas virtuales maestras, el comando SSH para conectarse a cada una de las máquinas virtuales maestras es el mismo excepto por el puerto SSH, que es 2200 para 1 maestro, 2201 para el maestro 2, 2202 para el maestro 3, 2203 para el maestro 4 y 2204 para el maestro 5. Con tres máquinas virtuales maestras, los puertos SSH utilizados son 2200, 2201 y 2202. Para conectarse a una maestra 2, el comando SSH es el siguiente:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2201 [email protected]
Y, el comando SSH para conectarse al maestro 2 es el siguiente:
[email protected]:~$ ssh -i /home/deepak/.ssh/id_rsa -p 2202 [email protected]
El demonio de Docker se ejecuta en 172.16.0.5:2375 . Para mostrar información de todo el sistema, ejecute docker info dominio. Se lista la salida (parcial) del comando:
[email protected]:~$ docker -H 172.16.0.5:2375 infoContainers:0 En ejecución:0 En pausa:0 Detenido:0Imágenes:0Rol:PrimaryStrategy:spreadNodes:1 swarm-agent-D50F2361000001:10.0.0.5:2375Is Administrador:falso Versión de kernel:3.19.0-65-genericSistema operativo:linuxArquitectura:amd64CPU:2Memoria total:7.145GiB
Ejecución de una imagen de Docker Hello World
Cada una de las máquinas virtuales en un ACS Swarm es un host Docker y se puede ejecutar un contenedor Docker independiente en cualquiera de las máquinas virtuales Swarm. Como ejemplo, ejecute la imagen Docker "hello-world" en una máquina virtual maestra.
[email protected]:~$ docker run hello-worldNo se puede encontrar la imagen 'hello-world:latest' localmentelatest:Extraer de la biblioteca/hello-world5b0f327be733:Extraer resumen completo:sha256:b2ba691d8aac9e5ac3644c0788e3d3823f9e97f757f01d2 imagen-Status newered1ddc6eb5858 world:latest ¡Hola de Docker! Este mensaje muestra que su instalación parece estar funcionando correctamente. Para generar este mensaje, Docker realizó los siguientes pasos:1. El cliente de Docker se comunicó con el demonio de Docker. 2. El demonio Docker extrajo la imagen "hola mundo" del Docker Hub. 3. El demonio Docker creó un nuevo contenedor a partir de esa imagen que ejecuta el ejecutable que produce el resultado que está leyendo actualmente. 4. El demonio de Docker transmitió esa salida al cliente de Docker, que la envió a su terminal. Para intentar algo más ambicioso, puede ejecutar un contenedor de Ubuntu con:$ docker run -it ubuntu bashComparta imágenes, automatice flujos de trabajo y más con un ID de Docker gratuito:https://cloud.docker.com/Para obtener más ejemplos e ideas, visite:https://docs.docker.com/engine/userguide/[email protected]:~$
La imagen de Docker hola-mundo se ejecuta en la VM maestra de Swarm y no en Swarm. La máquina virtual maestra es solo una de las máquinas virtuales del enjambre. Docker Swarm está escuchando el punto final 172.16.0.5:2375. Para ejecutar contenedores Docker en Swarm, se debe proporcionar el punto final de Swarm, como veremos en la siguiente sección. Cuando un contenedor Docker se ejecuta en un Swarm, el maestro Swarm asigna un agente Swarm para ejecutar el contenedor Docker.
Ejecutar una imagen de Nginx Docker
El hola-mundo La imagen de Docker utilizada en la sección anterior es una imagen de Docker muy básica sin mucha dockerización y solo genera un mensaje. En esta sección, ejecutaremos un contenedor independiente con la imagen de Docker nginx para un servidor Nginx. El siguiente comando crea un contenedor Docker llamado hello-nginx y expone el puerto 80 en el host.
docker run --name hola-nginx -d -p 80:80 nginx
La salida de docker run aparece el comando:
[email protected]:~$ docker run --name hello-nginx -d -p 80:80 nginxNo se puede encontrar la imagen 'nginx:latest' localmentelatest:Extraer de la biblioteca/nginxbc95e04b23c0:Extraer complete110767c6efff:Extraer completef081e0c4df75:Extraer Completyigest:sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee 6e65a03465392072Status:descarga nueva imagen para nginx:Últimab3679edba090ff41482f3544b4b4b4b45d2929c29c29c29c29c204c29c29c204c29c29c29c29c29c29c29c29c29c29c29c29c29c29c29c29c29c29c45454545454545454545454545454545454545429TNET854COTNEMLa ejecución de docker anterior El comando ejecuta un contenedor Docker en la VM maestra de Swarm. La ejecución de docker El comando se puede ejecutar en Swarm proporcionando la IP y el puerto del punto final de Swarm de la siguiente manera:
[email protected]:~$ docker -H 172.16.0.5:2375 ejecutar --name hola-nginx -d -p 80:80 nginxddcbc335988f7b5dba762b436bfde4c22d01144d67313813ba140a5391bac8dfListado de contenedores Docker
Enumere los contenedores de Docker en una VM maestra con docker ps dominio. El hola-nginx El contenedor Docker aparece en la lista. Un contenedor de administrador de Swarm, que no es creado por el usuario pero es un contenedor del sistema, se crea cuando se crea un Swarm.
Nota del editor: Tenga en cuenta que muchas de las siguientes listas de códigos son demasiado amplias para mostrarse correctamente. Desplace el cuadro de código hacia la derecha para ver la lista completa. |
[email protected]:~$ docker psCONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRESb3679edba090 nginx "nginx -g 'daemon..." Hace 3 segundos Subir 2 segundos 0.0.0.0:80->80/tcp hello-nginxf82ebb6efa4f swarm:1.1.0 "/swarm manage --r..." Hace 5 minutos Hasta 3 minutos 0.0.0.0:2375->2375/tcp containers_swarm_1
Los contenedores de Docker en el extremo de Swarm se pueden enumerar de la siguiente manera:
[email protected]:~$ docker -H 172.16.0.5:2375 ps -aCONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRESddcbc335988f nginx "nginx -g 'daemon..." Hace 36 segundos Hasta 35 segundos 10.0.0.5:80->80/tcp swarm-agent-D50F2361000001/hola-nginx
El contenedor Docker se ejecuta en un agente Swarm como lo indica el nombre del contenedor Docker swarm-agent-D50F2361000001/hello-nginx .
Acceso al contenedor Nginx Docker en un navegador
Como se discutió anteriormente, cuando un contenedor de Docker se ejecuta en Swarm usando el punto final de Swarm, el maestro de Swarm programa el contenedor en uno de los agentes de Swarm en Swarm. Para acceder al servidor Nginx que se ejecuta en el contenedor Docker en el extremo Swarm, se debe usar la IP pública del agente Swarm. El Swarm que hemos usado tiene solo un agente Swarm. La IP pública del agente Swarm se puede obtener de la lista de Recursos, como se muestra en la Figura 1.
Figura 1: Dirección IP pública del agente de enjambre
Alternativamente, haga clic en el balanceador de carga del agente Swarm en los Recursos , como se muestra en la Figura 2.
Figura 2: Equilibrador de carga de agente de enjambre
En la página de detalles del agente Swarm, obtenga la dirección IP (consulte la Figura 3).
Figura 3: Dirección IP del Agente Swarm
La dirección IP también se puede obtener de la página de detalles del balanceador de carga del agente Swarm, como se muestra en la Figura 4.
Figura 4: IP pública de Swarm Agent en la página Load Balancer
En un navegador en una máquina local, navegue hasta la dirección IP pública del agente Swarm. Se muestra la página de bienvenida del servidor Nginx, como se muestra en la Figura 5.
Figura 5: Invocar el servidor Nginx en un navegador
Eliminación de un contenedor Docker
Para eliminar un contenedor Docker, ejecute docker rm dominio. No se puede eliminar un contenedor de Docker en ejecución. Primero, detenga el contenedor Docker hello-nginx corriendo en el Enjambre.
[email protected]:~$ docker -H 172.16.0.5:2375 detener hola-nginxhola-nginx
Posteriormente, el contenedor detenido se puede eliminar con docker rm .
[email protected]:~$ docker -H 172.16.0.5:2375 rm hola-nginxhola-nginx
Inicializar el modo Docker Swarm
Como se mencionó anteriormente, Azure Container Service Swarm no tiene el modo Swarm habilitado de forma predeterminada. El modo Swarm debe inicializarse con docker swarm init comando.
[email protected]:~$ docker swarm init --advertise-addr 52.176.1.213Swarm inicializado:el nodo actual (ia4uj7431stu8y0j5h2yvdp27) ahora es un administrador.
Para agregar un trabajador a este enjambre, ejecute el siguiente comando:
docker swarm join --tokenSWMTKN-1-5ksj7uqccgv1vnnmie09qmt191ldpupof4ihg4vhm083c20xsh -6uyq5653uo62e521bcoatzyyz52.176.1.213:2377
Para agregar un administrador a este enjambre, ejecute 'docker swarm join-token manager' y siga las instrucciones.
Enumere los nodos del modo Swarm con docker node ls dominio. El nodo del administrador de Swarm aparece en la lista.
[email protected]:~$ docker node lsID HOSTNAME STATUS DISPONIBILIDAD MANAGER STATUSia4uj7431stu8y0j5h2yvdp27 * swarm-master-D50F2361-0 Listo Líder activo
Creación de un servicio Docker
Habiendo inicializado el modo Docker Swarm, cree un servicio Docker con docker service create dominio. Como ejemplo, cree un servicio de Docker que consta de dos réplicas usando la imagen de Docker alpine y haga ping a docker.com.
[email protected]:~$ docker service create--replicas 2 --name helloworld alpine ping docker.comtg1ywqiyei3jw9prco6890ol1
Como otro ejemplo, cree un servicio de Docker con la imagen de Docker tutum/hello-world y exponga el servicio en el host en el puerto 8080.
[email protected]:~$ docker service create> --name hello-world> --publish 8080:80> --replicas 2> tutum/hello-world3e38c1595cddg0ckmoyasrnnu
Listado de los servicios de Docker
Enumere los servicios de Docker con docker service ls dominio. Se enumeran los dos servicios creados en la sección anterior.
[email protected]:~$ docker service lsID NOMBRE MODO REPLICAS IMAGEN PUERTOS3e38c1595cdd hello-world replicado 2/2 tutum/hello-world:latest *:8080->80/tcptg1ywqiyei3j helloworld replicado 2/2 alpino:último
Listado de tareas de servicio de Docker
Enumere las tareas de servicio de Docker para helloworld servicio basado en la imagen Docker alpine .
[email protected]:~$ docker service ps helloworldID NOMBRE NODO DE IMAGEN ESTADO DESEADO ESTADO ACTUAL ERROR PUERTOS0mal82mskbge helloworld.1 alpine:latest swarm-master-D50F2361-0 En ejecución En ejecución 33 segundos agoiqz0bqkldxs2 helloworld.2 alpine:latest swarm- master-D50F2361-0 En ejecución En ejecución Hace 32 segundos
Enumere las tareas de servicio de Docker para hello-world servicio basado en tutum/hello-world Imagen acoplable.
[email protected]:~$ docker service ps hello-worldID NOMBRE NODO DE IMAGEN ESTADO DESEADO ESTADO ACTUAL ERROR PUERTOSyok48ja4o835 hello-world.1 tutum/hello-world:latest swarm-master-D50F2361-0 En ejecución En ejecución 38 segundos agox5tvcuglwzd0 hello-world.2 tutum/hello-world:latest swarm-master-D50F2361-0 En ejecución En ejecución hace 38 segundos
Listado de contenedores Docker para el servicio Docker
Los contenedores de Docker para un servicio de Docker en un host de Docker en Swarm se pueden enumerar con docker ps comando.
[email protected]:~$ docker psID DEL CONTENEDOR IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRESb6b069102300 tutum/hello-world:latest "/bin/sh -c 'php-f..." Hace 6 minutos Hasta 6 minutos 80/ tcp hello-world.2.x5tvcuglwzd05olktbf3tpfqe62e26d4bc0ff tutum/hello-world:latest "/bin/sh -c 'php-f..." Hace 6 minutos Hasta 6 minutos 80/tcp hello-world.1.yok48ja4o835nc7cog8hhjlr7db4827da350b alpine:latest " pingdocker.com" hace 7 minutos Hasta 7 minutos helloworld.2.iqz0bqkldxs2sg8ny50je7e7y92dab9f7ae97 alpine:latest "pingdocker.com" Hace 7 minutos Hasta 7 minutos helloworld.1.0mal82mskbgecbcwh3op18nrr
Contenedores Docker para hello-world y holamundo los servicios se enumeran.
Exploración de registros generados por un contenedor de servicios de Docker
Los registros generados, si los hay, en un contenedor de Docker para un servicio de Docker se pueden enumerar con los registros de Docker dominio. Como ejemplo, obtenga el ID del contenedor para un servicio basado en imágenes alpinas y enumere los registros:
[email protected]:~$ docker registra db4827da350bPING docker.com (34.201.187.190):56 bytes de datos
Como indica el resultado, se hace ping al dominio docker.com y se intercambian 56 bytes de datos.
Conclusión
En este artículo, analizamos el uso de Docker en un clúster de Docker Swarm en Azure Container Service. Utilizamos contenedores Docker independientes y servicios Docker en Swarm. Un clúster de Swarm en ACS expone un extremo de Swarm para ejecutar un contenedor Docker independiente. Cuando los contenedores de Docker se ejecutan en el extremo de Swarm, Swarm ejecuta contenedores de Docker independientes en los agentes de Swarm. El modo Swarm no está habilitado de forma predeterminada y debe inicializarse en una VM maestra de Swarm.