Docker 1.12

Novedades de Docker 1.12

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Docker 1.120

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.

2 thoughts on “Novedades de Docker 1.12

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *