Docker – lo básico para ir calentando

Docker es una tecnología para poder virtualizar contenedores. Los contenedores son de utilidad para programadores y administradores de sistemas, con ellos se pueden desplegar aplicaciones o sistemas con facilidad en cualquier máquina que tenga Docker instalado, además tiene un repositorio de imágenes de contenedores donde dispondremos de sistemas y gestores de contenido ya preparados para desplegar. Puede usarse en todos los ámbitos del desarrollo de aplicaciones y gracias a el podemos dejar preconfigurada en un contenedor la aplicación, gestor de contenido o lo que deseemos dentro. Una vez esté la imagen hecha podremos moverla de máquina, subirla al repositorio de Docker o simplemente exportarla para tenerla guardada como backup. La principal ventaja es su ligereza y la capacidad de poder trabajar tanto en entornos de preproducción como de producción.

Docker usa LXC (LinuX Containers) para poder virtualizar contenedores Linux, es una tecnología que usa la virtualización por sistema operativo, esto es un tipo de virtualización distinta a a otros como virtualbox o aplicaciones de hypervisor. Hay que dejar claro que con docker no creamos máquinas virtuales, si no entornos (contenedores) virtuales. Lxc se ayuda del kernel de Linux para poder virtualizar entornos, utiliza la funcionalidad cgroups del kernel, gracias a esto puede crear entornos aislados en sistemas GNU/Linux, tenéis más info aquí.

Instalación

Para su instalación usaremos una máquina virtual en Debian Jessie, no explicaré el proceso de instalación del sistema, tampoco necesitamos entorno gráfico ya que podemos gestionarlo perfectamente desde la consola, así ahorramos recursos y mejoramos el rendimiento de la máquina. Hay que tener en cuenta que necesitamos un kernel superior a la versión 3.10 y una versión de Debian de 64 bits.

Una vez instalada la máquina limpia agregamos la key del repositorio con el siguiente comando:

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Nos dará OK cuando la haya agregado,ahora ejecutamos el siguiente comando para crear el fichero sources.list en el directorio sources.list.d:

touch /etc/apt/sources.list.d/docker.list

Ahora añadimos al fichero que acabamos de crear la línea que hay a continuación:

deb https://apt.dockerproject.org/repo debian-jessie main

También debemos instalar con el comando apt-get el paquete apt-transport-https. Una vez instalado podemos realizar apt-get update sin problemas. Si queremos comprobar si estamos usando correctamente los repositorios de Docker usaremos el siguiente comando:

apt-cache policy docker-engine

Ahora que hemos añadido los repositorios correctamente podemos instalar el motor Docker con el comando:

apt-get install docker-engine

Cuando se nos haya instalado tan sólo tendremos que iniciar el servicio y ya lo tendremos funcionando. Ahora para comprobar que funciona podemos usar su contenedor de prueba con el siguiente comando:

docker run hello-world

Manejando Docker

Podemos comprobar en la shell que al no tener la imagen que le indicamos, la busca y la descarga del repositorio oficial, para poder buscar en el repositorio usaremos el comando search de docker:

docker search "ubuntu apache django"

Esto nos da la siguiente salida, donde podemos ver su descripción el rating mediante las estrellas que tiene y si es oficial. Si queremos ver las descripciones completas usaremos el modificador -l al final del comando.

Docker-Search-Ejemplo

Para descargarnos la imagen usamos el comando pull del motor de docker:

docker pull ubuntu

Una vez descargada la imagen podemos correr un contenedor de la siguiente forma:

docker run -ti ubuntu /bin/bash

Con esto entramos en el contenedor en modo terminal (por el modificador -t) ahora podemos instalar las aplicaciones desde el repositorio de ubuntu que necesitemos en el contenedor, por ejemplo mysql-server. Una vez tengamos instalado y configurado lo que queramos, podemos guardar la imagen del contenedor, para ello, ya que estamos en el modo shell, podemos salir de ella sin matar la máquina (como pasaría si usamos exit) con la siguiente combinación de teclas Ctrl+P y Ctrl+Q. Ahora si ejecutamos el comando docker ps, podemos ver nuestro contenedor funcionando, si hemos instalado un servidor web de pruebas podemos acceder a el a través de la dirección IP virtual que disponemos en nuestro contenedor. Ahora anotamos su ID y exportamos la máquina con el siguiente comando:

docker commit id_contenedor nombre_de_la_nueva_imagen

Ahora si listamos las imágenes podemos ver guardado nuestro contenedor con toda la configuración que habíamos realizado. También podemos exportar el contenedor a un archivo empaquetado de la siguiente forma:

docker save nombre > /home/usuario/nombre.tar

Una vez guardado nos podemos llevar nuestro contenedor a otro docker y hacerlo funcionar sin problemas con la configuración que ya habíamos realizado. Todo esto son unas grandes ventajas a la hora de configurar y portar aplicaciones a otras máquinas o entornos y cada vez tiene más aceptación dejando claro que es una gran solución de virtualización. Un saludo!