Presentado el pasado lunes en la DockerCon 2016, parece que esta versión va a traer grandes y esperadas novedades.
Lo más importante, qué luego veremos en detalle, es que se integra totalmente Docker Swarm. Como ya vimos, Docker Swarm sirve para crear clusters de servidores con contenedores.
En el tutorial vimos que no es sencillo crear un cluster, pero es algo que se por si no es sencillo. Tampoco era más sencillo antes de que aparecieran los contenedores Docker. Pero esta nueva versión todo eso cambia porque se ha integrado completamente en el mismo programa.
Como el propio blog de Docker dice esta versión está basada en 4 principios:
- Simple pero potente, esto se explica con la facilidad que tendrás para crear tus servicios. Sólo te preocuparás de crecer no del sistema. Centrándose todo en la capacidad de orquestar automáticamente.
- Flexibilidad. El tener esa facilidad de levantar nodos da una gran elasticidad. Yo siempre he visto Docker como la posibilidad de disponer de Amazon AWS pero privado. Pues esta versión se acerca cada vez más a esa flexibilidad.
- Seguridad un requisito indispensable para cuando hablas de aplicaciones empresariales. En otras versiones se usaba certificados PKI que son difíciles de entender y usar. En esta versión se ha avanzado en la seguridad por otro camino.
- Compatibilidad, por supuesto todo lo que tengas hecho con las versiones anteriores no lo tienes que tirar.
Hay que recordar que esta es una tecnología muy novedosa y que no está todavía consolidada. Esto hace que cada nueva versión pueda introducir muchas novedades e incluso no ser compatible, aunque no es el caso y los chicos de Docker han tenido en cuenta que ya hay muchas aplicaciones en producción.
Haber integrado Docker Swarm nos permite desde el mismo comando tener todo bajo control en lo que a servicios se refiere:
- Declara el estado del servicio
- Actualizaciones sin perdida de servicio
- Tener una monitorización personalizada del estado de los servicios
- Conciliación de los servicios para comprobar si el estado es el que queremos.
Todo esto en las anteriores versiones se complicaba tanto que era más sencillo usar otras aplicaciones o servicios como Kubernetes. Pero vamos a ver con un ejemplo como podemos tener un cluster de varios nodos con unos cuantos comandos
Instalación
No es que sea complicado instalar Docker, el problema es que la versión 1.12 no es todavía estable y no está en los repositorios oficiales.
Para ello se ha creado un script de instalación que simplifica el proceso:
>_ curl -fsSL https://test.docker.com/ | sh
Con este sencilla orden instalará la versión que estamos probando.
>_ docker version
Client:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built: Fri Jun 17 21:09:07 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built: Fri Jun 17 21:09:07 2016
OS/Arch: linux/amd64
Demostración con Docker 1.12
Vamos a crear un cluster con 2 nodos en la que vamos a crear una aplicación. Dado que esto nodos tienen muy pocas prestaciones nos ayudarán a entender mejor la necesidad de crecimiento.
El primer paso es crear nuestro servicio.
>_ docker swarm init
Swarm initialized: current node (8qkdiy616g0c8zky98m9l9a5u) is now a manager.
>_ docker node ls
ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
8qkdiy616g0c8zky98m9l9a5u * ip-172-31-24-241 Accepted Ready Active Leader
Con node
podemos información de nuestros nodos. En este caso el listado de nodos.
Una vez levantado el nodo lider añadiremos el segundo nodo al cluster. Para ello necesitamos tener acceso al puerto 2377
. Desde el segundo nodo nos conectamos:
>_ docker swarm join ip-172-31-24-241:2377
Si vamos al nodo principal podemos comprobar cuantos nodos tenemos:
>_ docker node ls
ID NAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS
1pyeqs2hazvqygh8iboudcbri ip-172-31-22-89 Accepted Ready Active
8qkdiy616g0c8zky98m9l9a5u * ip-172-31-24-241 Accepted Ready Active Leader
Ya tenemos los dos nodos y ahora vamos a crear nuestro servicio, así de fácil. Crearemos la aplicación de prueba que se ha usado para los ejemplos en la DockerCon16.
>_ docker service create --name demo -p 8080:80 instavote/vote
935hxwalab16gflwzfviqi5ec
>_ docker service ls
ID NAME REPLICAS IMAGE COMMAND
935hxwalab16 demo 1/1 instavote/vote
Ya tenemos el servicio en funcionamiento con una única replica.
>_ docker service tasks demo
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
02au8od0js6c18jcru43del37 demo.1 demo instavote/vote Running 3 minutes Running ip-172-31-24-241
Vemos que la replica se ha levantado en el primer nodo. En la demo que hicieron en la DockerCon se podría ver la aplicación desde cualquiera de los dos nodos. Yo en mis prueba no me ha funcionado así y hasta que no he escalado el numero de replicas no me ha funcionado. Creo que es más lógico. Vamos a escalar a 4 para tener un par de replicas en cada nodo:
>_ docker service scale demo=4
demo scaled to 4
>_ docker service tasks demo
ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
02au8od0js6c18jcru43del37 demo.1 demo instavote/vote Running 15 minutes Running ip-172-31-24-241
8d9uf6zqgqmdr15tl6mwd7t61 demo.2 demo instavote/vote Running 9 seconds Running ip-172-31-22-89
bf3pwa4o0eu3doc5p9vs72jcp demo.3 demo instavote/vote Running 9 seconds Running ip-172-31-22-89
8xe2vk2xcpu41tits767kwg1a demo.4 demo instavote/vote Running 9 seconds Running ip-172-31-24-241
Ahora si que podemos acceder a la aplicación desde cualquiera de las dos ips publicas de nuestros nodos.
Así de sencillo. Si ahora conectamos un DNS que nos balancé entre las dos ips publicas ya tendremos nuestro cluster para dar servicio.
En el próximo post explicaremos más ventajas de esta nueva versión.
Hasta pronto.
Comentarios recientes