Docker: todo sobre los contenedores

 

Logo de Docker: ballena cargada de contenedores

Como ya sabrás, existen varios tipos de virtualización, uno de ellos es la virtualización a nivel de sistema operativo, y uno de los proyectos que más destaca en este sentido es Docker, junto con otros proyectos open-source como OpenVZ, LXC/LXD, Linux-VServer, etc., o el software propietario Virtuozzo. Si conoces este mundo o si eres asiduo a este tipo de blogs, ya sabrás del proyecto cuyo logo es una ballena (de ahí el título para los que aún no lo sepan), y sobre todo habrás notado como en éstos últimos años su presencia en los medios e interés ha ido aumentando exponencialmente.

Y es que estas nuevas tecnologías son el presente y el futuro, sobre todo con el brutal crecimiento de los servicios en la nube de los que tantas veces hemos hablado. Docker, entre otros muchos proyectos de código abierto y libres, son los que están permitiendo esa expansión y grandes posibilidades que requerimos de la nube. Pero ¿Qué es Docker? ¿Qué es un contenedor? ¿Cómo funciona?

Docker y contenedores:

RancherOS

Aunque la respuesta es algo más compleja y necesitaría varios de estos artículos, intentaré resumirlo. No obstante, si necesitas conocer más sobre este fantástico proyecto, existen muy buenos libros como el de Alberto González, actual Cloud Consultant de Red Hat. Se trata de una guía práctica que podrás adquirir a un precio asequible tanto en Amazon como en Agapea. Bien, dicho esto, vamos a conocer qué es Docker.

Todos sabemos que los contenedores se han transformado en una herramienta con mucho potencial en Linux, pues bien, éstos pueden implementarse y gestionarse gracias al software Docker. Los contenedores no son más que “cajas” aisladas con lo esencial para poder ejecutar un determinado programa o aplicación. Eso se puede entender como una máquina virtuales ligera, en vez de las completas y pesadas con las que se trabaja en la virtualización completa. Esa reducción se traduce en un menor overhead.

Los contenedores aportan ligereza, también portabilidad, autosuficiencia, y una flexibilidad muy codiciada por los desarrolladores. Todo gracias LXC de nuestro kernel  favorito, Linux, y al proyecto Docker en sí, con sus contenedores, imágenes y repositorios. Y son estas ventajas las que han traido el éxito, que se ha dejado notar tanto por la implicación de algunos grandes del sector como Google, Red Hat, IBM y Microsoft, como por su implantación y buena acogida en grandes empresas y servicios cloud que todos usamos a diario (AWS, Digital Ocean,…).

Instalar Docker paso a paso:

Interfaz web Docker Cloud

Tienes diversas alternativas para instalar Docker, desde obtener el tarball con el código fuente y compilar, hasta hacerte con binarios desde los distintos repositorios y gestionarlos con los gestores de paquetes de tu distro openSUSE, Ubuntu, Debian, CentOS, Fedora, etc. Quizás con los paquetes binarios sea más cómodo, pero para no alargar demasiado el tema, voy a exponer un método más directo y universal que funciona en cualquier distribución:


sudo curl -fsSL https://get.docker.com/ | sh

Así de sencillo. Ahora ya tenemos el demonio y el cliente, éste último será el que interactúe con el demonio de Docker y nos permitirá hacer todo lo que ofrece este software. Pero aún queda algo por hacer, y es levantar el servicio, es decir, iniciar el demonio de Docker. Para systemd puedes hacer lo siguiente:


sudo systemctl enable docker

sudo systemctl start docker

Si todo ha ido bien, ya estará activo todo. Puedes comprobarlo con:


sudo systemctl status docker

Ya podemos comenzar a utilizarlo…

Primeros pasos: creando un contenedor

Diagrama de un contenedor

Bien, como ya sabes, el contenedor es un paquete con todo lo necesario para que una o varias aplicaciones se puedan ejecutar, es decir, similar a una máquina virtual, pero más ligero al depender el host para la ejecución. Para que el contenedor funcione deberá tener las bibliotecas necesarias para la ejecución, así como ciertas dependencias, como algunas herramientas del sistema operativo. Por supuesto, otra de las partes necesarias es el runtime environment, es decir, un entorno de ejecución como por ejemplo los intérpretes de para los lenguajes interpretados, JVM, los ficheros con el código o binarios, etc.

Existen unos comandos básicos de Docker con los que te “moverás” dentro del entorno, son bastante numerosos, como info, insert, kill, stop, start, build, ps, etc. Para poder verlos todos y para qué sirve cada uno, te bastará con ejecutar:


docker

Para más información puedes consultar la documentación oficial.

¿Cómo se puede crear un contenedor con Docker? Bien, ahora vamos a poner un ejemplo, vamos a crear un contenedor con Ubuntu y para ello usamos el comando run, que permite tanto crear como ejecutar contenedores (más información run -h):


docker run -i -t ubuntu /bin/echo Prueba contenedor

Y eso usará una imagen local si ya la tenemos o, de no encontrarla, la descargará. Además creará el contenedor, asignará espacio para el nuevo FS y lo montará. Por supuesto asignará una interfaz de red para la comunicación guest/host. Una vez realizado, nos mostrará un echo con la frase “Prueba contenedor” que hemos puesto.

Puedes ver todas las imágenes que tienes con:


docker images

Y para arrancar uno, puedes usar el ID del contenedor con:


docker start -a <pon-la-ID-del-container>

Para pararlos, puedes emplear stop en vez de start:


docker stop <pon-la-ID-del-container>

Y esto solo es lo más básico en Docker. Espero que te haya servido de ayuda para iniciarte y dar los primeros pasos de muchos, ya que puede darte muchas posibilidades. Como ves es un tema muy amplio y en el que puedes profundizar comenzando por este tutorial o adquirir libros adicionales como el citado en los primeros párrafos, el cuál recomiendo por su sencillez en las explicaciones prácticas. No olvides dejar tus comentarios


Un comentario

  1.   sayabros dijo

    Interesante, esperaré con ansias los próximos artículos, gracias

Deja un comentario

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