Virtualización con Docker: primeros pasos

por:

Virtualización con Docker primeros pasos

Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite desplegar programas en contenedores de software.

¿Qué es y cómo funciona Docker?

Como hemos comentado, Docker es un proyecto Open Source creado y liderado por Solomon Hykes que afronta el problema de la virtualización de servicios y programas. Este tema es muy importante, ya que se busca aprovechar al máximo el recurso disponible (un servidor) para ejecutar los servicios que necesitemos.

El funcionamiento de Docker es distinto a los métodos más comunes que se han utilizado anteriormente, ya que no necesita un sistema operativo invitado para ejecutar sobre él los servicios, sino que lo hace sin este intermediario. Esta tecnología se denomina de contenedores, siendo un contenedor un programa, servicio o sistema que queremos desplegar. Esta arquitectura se puede ver en la siguiente ilustración:

Contenedores de Docker

Al no utilizar máquinas virtuales es capaz de conseguir un mayor rendimiento, ya que el consumo de recursos es menor. Sin embargo, gracias al uso del kernel de Linux es capaz de aislar cada contenedor. Esta decisión también aporta otras características como una mayor seguridad (gracias a estar aislados) o un despliegue más rápido de los recursos.

¿Quién usa Docker?

Muchos se preguntarán, bueno esto parece todo muy bonito, pero realmente se usa o es algo complejo y que no compensa utilizarlo. La respuesta es bastante clara, lo usan los principales proveedores de computación en la nube: Amazon Web Services, Google Cloud Platform, IBM Bluemix, Microsoft Azure …

¿Cómo instalar Docker?

Docker está disponible para los principales sistemas operativos, en mi caso he usado Ubuntu y os dejo los pasos que debéis seguir, para otros sistemas visitad su manual de instalación.

 

1
sudo apt-get install apt-transport-https ca-certificates
sudo apt-get install apt-transport-https ca-certificates

sudo apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo echo “deb https://apt.dockerproject.org/repo ubuntu-xenial main” >> /etc/apt/sources.list sudo apt-get update sudo apt-get purge lxc-docker sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual sudo apt-get install docker-engine sudo service docker start sudo docker run hello-world

Estos comandos lo que van a hacer es añadir el repositorio de Docker, instalarlo, arrancarlo y probar que todo funciona correctamente. El resultado de la ejecución será el siguiente:

Docker instalado correctamente

Como se puede ver en la explicación, Docker ha contactado con su sistemas de virtualización, ha bajado la imagen “hello-word” del Docker Hub, ha creado un nuevo contenedor, ha iniciado la imagen y ha mostrado el resultado de la ejecución mediante la terminal.

¿Qué es Docker Hub?

Docker Hub es un repositorio de imágenes para Docker, en él podemos encontrar gran cantidad de imágenes con el software más popular listo para ser ejecutado. Sería similar a un conjunto de máquinas virtuales ya listas, que nosotros en virtual box bajaríamos e importaríamos. Pero en este caso, como ya se ha comentado, no es necesario que a todo software le acompañe un sistema operativo, sino que podemos tener imágenes con un programa como nginx o MySQL.

Docker hub el repositorio de imágenes de docker

 

Ejecutando Debian en un contenedor de Docker

Para el ejemplo práctico, vamos a instalar Debian (una de las distribuciones Linux más ligeras) en un contenedor de Docker. Para ello lo primero es buscar las imágenes disponibles de Debian:

Buscar imágenes de Debian en Docker

Como podemos ver hay muchas, en nuestro caso vamos a utilizar la imagen oficial:

Instalar Debian en Docker

Con ese comando ya hemos bajado una imagen de Debian destinada a ser ejecutada en un contenedor.

Ahora vamos a proceder a ejecutar una serie de comandos en nuestro Debian, para ello iniciamos su contenedor y le pasamos como argumento lo que queremos que ejecute:
Docker ejecutando Debian

En la imagen superior podemos ver cómo nuestro Debian es la versión 8.

 

Ejecuntado Nginx en un contenedor de Docker

Si en lugar de querer ejecutar un Debian completo, sólo necesitamos un servidor web como Nginx podemos ejecutarlo de la siguiente manera:

Docker ejecutando Nginx en un contenedor y sirviendo una página

Lo primero que hago es crear un fichero (index.html) de prueba con el texto “Hola Binarios”, luego mando a Docker que me ejecute un contenedor de Nginx:

  • Con -d indico que la ejecución va a ser autónoma, es decir que no pare de ejecutarse.
  • Con -p indico que quiero reenviar la información que Nginx va a servir por el puerto 80 al 8888, ya que en mi ordenador el puerto 80 ya está ocupado.
  • Con -v indico la carpeta donde están los archivos que quiero que sean servidos y los permisos que tienen.

Finalmente descargo con curl el contenido de la página que se está sirviendo Nginx y muestra el contenido. Esto funciona ya que por defecto si hay múltiples archivos en una carpeta, Nginx sirve el que se llame index.html.

Ahora vamos a modificar el archivo index.html y veremos como el contenido que sirve Nginx es el actualizado:

Docker sigue ejecutando Nginx el cual sirve contenido actualizado

Gestionando Docker con interfaz gráfica

Muchos se preguntarán si la única manera de realizar la gestión de Docker es mediante la terminal, la respuesta es que se puede utilizar también una interfaz gráfica, que no es más que otro contenedor de Docker, el cual podemos ejecutar con:

1
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/docker.sock --name dockerui abh1nav/dockerui:latest -e="/docker.sock"
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/docker.sock --name dockerui abh1nav/dockerui:latest -e="/docker.sock"

Ahora visitamos con un navegador web localhost:9000 y tenemos nuestra interfaz gráfica para manejar Docker.

Interfaz gráfica de Docker

Interfaz gráfica de Docker imágenes disponibles

 

Otras cosas que se pueden hacer con Docker son utilizar otros repositorios de imágenes o crear las nuestras propias, pero eso ya se sale del objetivo de este manual. Esperamos que os haya parecido interesante.

Un saludo y gracias a @hectorgoan por proporcionarme parte del material de este artículo.

The following two tabs change content below.

Jorge Durán

Administrador, redactor y creador de Somos Binarios
Entusiasta de la tecnología desde los 10 años, desarrollador y creador de varios proyectos de software y autodidacta por naturaleza. Ingeniero Informático por la USAL