martes, 12 de agosto de 2014

¿En que se diferencia Docker de la virtualización tradicional?

Docker, y las tecnologías de contenedores en general(LXC, chroot, zones, etc) pueden parecer idénticas a las maquinas virtuales, para entender en que se diferencian, partamos del siguiente gráfico:


En el grafico, resaltados en color naranja, se listan los componentes que se usan para ejecutar una aplicación tanto en maquina virtual como en Docker, cuando se utilizan maquinas virtuales, es necesario virtualizar todo el sistema operativo,  con el gasto de recursos que eso implica, minimizando la ram, disco y procesador que podrá usar la aplicación en si, en cambio, utilizando Docker, la cantidad de recursos para cada aplicación es mayor al usar directamente los binarios y librerías para ejecutar la aplicación dentro de una imagen.

En ambos casos, las aplicaciones que se ejecuten dentro de la maquina virtual o de la instancia de Docker, estan aisladas del sistema operativo anfitrión,  pudiendo ejecutarse tantas maquinas virtuales/instancias de contenedores como nos permita nuestro hardware, en el caso de Docker, al usarse menos recursos, es posible tener un mejor rendimiento de aplicaciones por servidor que las maquinas virtuales, la principal desventaja de Docker es que solo se pueden tener instancias de distribuciones Linux, siendo imposible ejecutar instancias de Windows u otros, para ese tipo de ambientes, estaremos forzados a usar virtualizacion

Cabe señalar que Docker utiliza características del Kernel de linux implementadas en la version 3.8, por lo que deberemos usar dicha version o una superior para tener Docker funcionando; cualquier distribucion moderna incluye kernel 3.8 o superior. 

sábado, 9 de agosto de 2014

Instalar Docker en Ubuntu 14.04

Hay tres opciones para instalar Docker en Ubuntu Trusty, recomiendo instalar la ultima version estable de docker disponible, ya que el proyecto en se encuentra en  desarrollo activo y tiene una comunidad muy grande que arregla problemas e introduce nuevas características constantemente.

Método 1: Ultima versión en un solo paso

Existe un script que automatiza todo el proceso de instalación, el único requisito para este método es tener instalado curl, en caso de no tener curl en el sistema, podemos instalarlo ejecutando:
 sudo apt-get install curl -y  
y el comando que realizara la instalación de Docker es:
 curl -sSL https://get.docker.io/ubuntu/ | sudo sh  

Método 2: Ultima versión paso a paso

Si preferimos instalar manualmente la ultima version estable, los pasos son los siguientes:

  1. Instalar soporte https para APT
  2.  [ -e /usr/lib/apt/methods/https ] || {  
      apt-get update  
      apt-get install apt-transport-https  
     }  
    
  3. Agregamos la llave del repositorio de Docker al llavero local
  4.  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9  
    
  5. Añadimos el repositorio a la lista de fuentes de APT (quizá salga una advertencia sobre la confiabilidad del paquete, aceptamos)
  6.  sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\  
     > /etc/apt/sources.list.d/docker.list"  
    
  7. Actualizamos
  8.  sudo apt-get update  
    
  9. Instalamos el paquete lxc-docker
  10.  sudo apt-get install lxc-docker  
    

Metodo 3: Paquete oficial para Ubuntu

La desventaja de este metodo es que probablemente la ultima version disponible en el repositorio de Ubuntu no sera la ultima version estable de Docker, pero es una opcion ideal para entornos donde se desconfía de las fuentes de terceros, cabe señalar que existe un antiguo paquete llamado docker en Debian/ubuntu, por lo que el nombre del ejecutable es docker.io.
  1. Actualizamos
  2.  sudo apt-get update  
    
  3. Instalamos el paquete docker.io
  4.  sudo apt-get install docker.io  
    
  5. Creamos un enlace a docker.io para poder usar simplemente docker como comando
  6.  sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker  
    
  7. Habilitamos el autocompletado para docker
  8.  sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io  
    

Confirmando la instalación

Sea cual sea el método de instalación que hayamos utilizado, podemos ver la version de docker que instalamos ejecutando:
 docker -v  
Ahora, para probar que realmente este funcionando, podemos ejecutar el siguiente comando:
 sudo docker run -i -t busybox cat --help  
Que después de unos minutos nos dará una salida similar a esta:
 BusyBox v1.22.1 (2014-05-22 23:22:11 UTC) multi-call binary.  
   
 Usage: cat [FILE]...  
   
 Concatenate FILEs and print them to stdout  
   
¿Que acaba de suceder?  Docker busco localmente la imagen Busybox(distribución minima de Linux) para ejecutar el comando cat, al no encontrarlo, bajo del registro publico dicha imagen, creo una instancia y la uso para ejecutar el comando indicado, en este caso especifico el comando nos indica la version de BusyBox que tenemos instalada.

En siguientes artículos, indicaremos donde se fue la instancia de Busybox y como interactuar con distintos contenedores, mientras tanto, existe un excelente tutorial online de Docker en la web oficial que pueden usar aun sin instalar nada, si tienes una distro o version de linux distinta, existen guías oficiales (en ingles) en este link