4. Entorno experimental
4.4. Docker
4.4.4. Libcontainer
Docker combina los espacios de nombres, los grupos de control en un contenedor llama- doformato de contenedor. El formato predeterminado del contenedor eslibcontainer.
4.4.5. Docker daemon
El demonio de Docker (Docker daemon), es un proceso residente en memoria, que admi- nistra y manipula los contenedores. Se mantiene a la escucha de peticiones enviadas a través de la API de Docker. El programa cliente llamado «docker», provee una interfaz
de línea de comandos que permite al usuario interactuar con el demonio como se ve en la figura 4.32.
Figura 4.3:Vista delDocker Enginey su interacción con cada componente del sistema.
4.4.6. El cliente Docker
El cliente Docker (docker) es la forma principal en que muchos usuarios de Docker inter- actúan con Docker. Cuando usa comandos como:
$ docker run "imagen"
el cliente envía estos comandos adockerd, que los ejecuta. Este comando utiliza la API de Docker. El cliente Docker puede comunicarse con más de un demonio.
4.4.7. Redes de contenedores
Cuando nos conectamos a una aplicación corriendo dentro de un contenedor y revisamos las interfaces de red en nuestra computadora podemos ver que hay una interfaz llamada
docker0.
$ ifconfig docker0
docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
La interfaz docker0 es creada por el docker daemon para poder conectarse con el con- tenedor. Esta red tiene un rango de direcciones IP típico: 174.17.0.1/24. Las primeras versiones de Docker presentaban problemas de seguridad o más bien de confiabilidad ya que cualquier contenedor de una máquina podía tener acceso a cualquier contenedor del mismo. La versiones más recientes de Docker permiten crear distintas subredes y aislar perfectamente grupos de contenedores para no permitir accesos no autorizados.
Las distintas redes que podemos tener configuradas por defecto en nuestra máquina son: hostrepresenta la red del propio equipo y haría referencia a eth0
bridge representa la red docker0 y a ella se conectan todos los contenedores por defecto.
nonesignifica que el contenedor no se incluye en ninguna red y si verificamos esto con el comando ifconfigdentro del contenedor veríamos que solo tiene la interfaz deloopback.
4.4.8. Docker Swarm
Uno de los desafíos de esta etapa, es lograr que sólo baste con descargar una imagen de Spark para Docker y crear un contenedor a través de un simple comando con el cual se ejecute todo lo necesario para poder empezar a usar Spark de forma distribuida en un clúster. En principio podríamos intuir que basta con tener las computadoras conectadas en red e iniciar Docker para que los servicios ejecutados en los contenedores puedan comunicarse entre los distintos nodos del clúster. En las etapas iniciales de la creación esto no dio resultado, puesto que Docker requiere una breve configuración y ajustes de red, para otorgarle la capacidad de comunicarse con otras computadoras corriendo Docker, aún cuando la configuración de red del sistema operativo esté realizada correcta y exista conectividad.
Un enjambre (swarm) es un grupo de máquinas que ejecutan Docker y se unen para for- mar un clúster. Una vez creado, puede ejecutarse el software necesario, pero ahora habi- litando la opción de trabajo distribuido a través delSwarm manager. Las máquinas unidas a un enjambre pueden ser tanto virtuales como físicas. Luego de unirse forman parte del conjunto de nodos. Los mismos pueden ser nodos administradores o trabajadores. Para la creación del swarm sólo basta con ejecutar en el host que será máster la siguiente secuencia de comandos.
$ docker swarm init --advertise-addr=192.168.240.1
Lo que hacemos aquí es iniciar el modo swarm, en la interfaz de red con la IP especificada. Lo siguiente es definir la red donde los nodos van a conectarse.
4.4.9. Redes overlay
Una red superpuesta (en inglés,overlay network) es una red virtual de nodos enlazados lógicamente, que está construida sobre una o más redes subyacentes (underlying network), tal como se ve en la figura 4.4. Se dice que los nodos de la red superpuesta están conec- tados por enlaces virtuales. Su objetivo es implementar servicios de red que no están disponibles en las redes subyacentes. Las redes superpuestas pueden apilarse de forma que tenga capas que proporcionen servicios a la capa superior.
En una red, los nodos se comunican entre sí usando los llamados protocolos de red. Un protocolo de red es un conjunto de reglas usadas por computadoras para comunicarse entre sí a través de una red. Los protocolos de la red normalmente se organizan en capas formando pilas. Por esta razón la forma habitual de crear una red superpuesta es añadir capas adicionales sobre los protocolos de las redes subyacentes.
Podemos construir una red superpuesta operando exclusivamente a nivel lógico. Por ejemplo, se puede aprovechar una red de nodos ya conectados para construir sobre ella una nueva red que proporcione servicios adicionales. Sin embargo, a veces también es necesario operar a nivel físico (además de a nivel lógico). Por ejemplo, para conectar dos redes de área local se necesita interconectar las dos redes a través de un enrutador. La conexión a través del enrutador no solamente proporciona una conexión física entre las redes, también implementa una nueva capa de protocolos que permite la interconexión (Doval and OMahony, 2003).
Figura 4.4:Vista de una red overlay sobre una topología de red subyacente
Para crear la red overlay, hay que ejecutar el siguiente comando «docker»:
$ docker network create --driver=overlay --attachable nombre_de_la_red
Y por ultimo crear el contenedor correspondiente de Spark en cada máquina mediante la siguiente instrucción
$ docker run -it -p 4040:4040 -p 8080:8080 -p 8081:8081 -h spark --name=spark \ > -v ~/data:/data --network nombre_de_la_red --ip 10.0.0.X p7hb/docker-sparkip
- itpara iniciar el contenedor en modo interactivo mediante una terminal bash. - ppara exponer puertos al sistema anfitrión.
- hpara especificar el nombre del host virtual. -- namepara especificar el nombre del contenedor.
- vpara especificar un punto de montaje para compartición de archivos entre siste- ma huésped y el contenedor.
-- networkes la red overlay que especificamos.
-- ipes la dirección ip estática de la red overlay asignada al contenedor.
La imagen utilizada para este trabajo ya fue previamente creada por Prashanth Babu3.