Primeros pasos con contenedores Docker

La función principal de la plataforma de contenedores de código abierto Docker está explícita en su eslógan: «Build, Ship and Run Any App, Anywhere», lo que significa «construye, distribuye y ejecuta cualquier app en cualquier parte». Concretamente, lo que propone Docker es simplificar las tareas de armar entornos de desarrollo o de prueba que emulen las condiciones de ejecución de una aplicación.

Qué son los contenedores en Docker

El concepto de contenedor en Docker reemplaza al concepto de máquina virtual, ofreciendo una alternativa más fácil de manejar para el desarrollo y testeo de aplicaciones. La principal diferencia entre una máquina virtual y un contenedor Docker es que la máquina virtual contiene todos los elementos que componen una máquina real: sistema operativo completo, BIOS, memoria, disco y demás recursos de hardware virtualizado.

A diferencia de los contenedores de la vida real, los contenedores Docker son livianos e independientes.
A diferencia de los contenedores de la vida real, los contenedores Docker son livianos e independientes.

En cambio, un contenedor Docker es un entorno de ejecuión que empaqueta el código y todas sus dependencias para correr aplicaciones de manera confiable, independientemente del hardware o del sistema operativo en donde se lleva a cabo la ejecución real. Los contenedores Docker son paquetes de software livianos, independientes y ejecutables que incluyen todo lo que puede necesitar una aplicación para ejecutar: código, runtimes, herramientas del sistema, bibliotecas del sistema y configuraciones.

Beneficios de los contenedores Docker

El principal beneficio de utilizar entornos virtuales basados en contenedores Docker es que se pueden ejecutar aplicaciones con diferentes requisitos en forma aislada, sin necesidad de crear máquinas virtuales pesadas y difíciles de administrar.

Además de ahorrar recursos en comparación con la virtualización de hardware tradicional, los contenedores Docker nos permiten instalar aplicaciones multiplataforma en diferentes infraestructuras, sin obligarnos a adaptar la configuración específica de cada host.

Imágenes Docker

Las copias portátiles del software de contenedores Docker se llaman imágenes. Las imágenes contienen las aplicaciones a ejecutar junto con todos los archivos binarios y de configuración más todas las bibliotecas que hagan falta para ejecutarlas.

Las imágenes Docker requieren muy poco del sistema anfitrión. Por este motivo, es fácil transportar un contenedor con todo su contenido entre diferentes máquinas, incluso con diferentes sistemas operativos (Linux, Windows o macOS).

La ejecución de un contenedor se lleva a cabo mediante el motor Docker, o Docker engine, que se encarga de levantar una imagen de docker y ejecutarla. Las imágenes Docker pueden ser creadas por el usuario u obtenidas en un repositorio llamado Docker Hub.

¿Qué es el Docker Hub?

El Docker Hub es una colección de repositorios de imágenes Docker que se ofrece como un servicio basado en la nube. Se puede encontrar en hub.docker.com. En Docker Hub coexisten tanto repositorios públicos como privados.

En los repositorios públicos de Docker Hub, los usuarios pueden subir sus imágenes para compartirlas con toda la comunidad de desarrolladores. Muchas de las imágenes en los repositorios públicos son imágenes oficiales creadas por el equipo de desarrolladores de la plataforma y por proyectos de código abierto consolidados.

En los repositorios privados de Docker Hub, las imágenes pueden ser accedidas por grupos restringidos de usuarios. Por ejemplo, un usuario puede subir una imagen y compartirla con todos los desarrolladores de su misma empresa.

¿Qué es Docker Engine?

El motor de Docker, o Docker engine, es una suite de software de código abierto, basada en arquitectura cliente-servidor, que permite construir, administrar y utilizar contenedores Docker para ejecutar aplicaciones. Docker engine está formado por los siguientes componentes:

  • Un servidor que ejecuta un proceso de fondo (un daemon, en la jerga Unix/Linux) llamado dockerd.
  • Interfaces de programas de aplicación (APIs) que deinen interfaces para que las aplicaciones interactúen con el dockerd.
  • Un cliente docker con interfaz de línea de comandos (CLI).

Con el cliente docker es posible ejecutar, detener y administrar contenedores mediante la terminal, ejecutando comandos como docker run, docker build y docker pull. Estos tres comandos se comunican con el proceso dockerd, el cual se encarga de llevar a cabo la instrucción enviada. El cliente y el daemon pueden estar instalados en el mismo sistema, o bien se puede utilizar el cliente para interactuar con el daemon que corre en otro sistema. La comunicación entre cliente y servidor puede llevarse a cabo directamente a través de sockets o mediante una API REST.

Arquitectura de componentes de la suite Docker Engine.
Arquitectura de componentes de la suite Docker Engine.

Instalación de Docker Engine

El software Docker Engine está disponible para múltiples plataformas, incluyendo varias plataformas Linux, macOS y Windows 10 (o posterior). En estos dos últimos la instalación puede hacerse mediante el paquete de Docker Desktop.

Los pasos para instalar Docker en Windows son bastante sencillos, similares a los de cualquier otro software que se instale en Windows con un asistente:

  1. Descargar el instalador de Docker desde esta dirección.
  2. Ejecutar el instalador haciendo doble clic en InstallDocker.msi.
  3. Seguir los pasos del asistente para aceptar el acuerdo de licencia, autorizar la instalación, hasta llegar al último paso en donde se informa que la instalación fue exitosa. Luego se puede hacer clic en Cerrar para salir del asistente.
  4. Si estás usando una cuenta de usuario que no es administrador local del equipo, debes agregarte al grupo de usuarios docker-users. Para esto debes correr la app del panel de control de Administración de equipos (con permisos de administrador) y navegar por el árbol de opciones hasta llegar a Usuarios y grupos locales y allí a Grupos. Debes localizar un grupo llamado docker-users, hacer clic en él con el botón derecho del mouse y seleccionar la opción Agregar a grupo. Una vez allí, puedes agregar tu usuario al grupo. Deberás desloguearte y volver a loguearte para que los cambios entren en vigor.

Trabajando con Docker Desktop

Docker Desktop no se inicia automáticamente luego de la instalación, por lo que para ejecutarlo es necesario buscar y seleccionar Docker Desktop entre las aplicaciones instaladas en Windows. La primera vez que se ejecuta la aplicación se deben aceptar los términos de licencia y luego hacer clic en Aceptar para continuar. Hecho esto, Docker Desktop se inicializará y luego lanzará automáticamente la Guía de Inicio Rápido.

Registros de log de un contenedor Docker.
Registros de log de la ejecución de un contenedor Docker.

El Docker Dashboard

El Docker Dashboard está disponible para Mac y Windows, brindando un acceso rápido a los registros de los contenedores y un intérprete de comandos dentro del contenedor. Además, permite gestionar fácilmente el ciclo de vida del contenedor (detener, eliminar, etc.).

Para acceder el dashboard, debes seguir las instrucciones del manual de Docker Desktop, con lo cual habrás llegado al punto de ejecutar un contenedor. Ahora probablemente te preguntes ¿qué es un contenedor? Es básicamente un proceso que corre en tu máquina (o en una máquina anfitriona) en forma aislada de todos los demás procesos. Al estar aislado, el contenedor aprovecha los espacios de nombres del kernel y los cgroups – ambas características que forman parte del sistema operativo Linux desde hace años. Usando la DockerAPI o el intérprete de comandos puedes crear, iniciar, detener, mover o eliminar un contenedor.

Los contenedores Docker presentan las siguientes características:

  • Pueden ejecutarse en máquinas locales, virtuales o en infraestructuras de nube.
  • Son portátiles entre diferentes sistemas operativos.
  • Funcionan en forma aislada de otros contenedores y ejecutan su propio software, binarios y configuraciones.

Explorando Docker por primera vez

Si has instalado Docker Desktop y quieres explorar más, aquí tienes un ejemplo rápido para empezar:

1. Abre Docker Desktop. 

2. Escribe el siguiente comando en tu terminal:

docker run -d -p 80:80 docker/getting-started

3. Abre tu navegador en http://localhost

4. Sigue las instrucciones para acceder a tu dashboard, ya sea en Mac o en Windows.

Deberías ver una pantalla semejante a la que sigue, con un contenedor visible en ejecución. Seguramente el nombre será diferente, ya que es asignado en forma aleatoria, combinando un adjetivo y el nombre de alguna persona famosa.

Si observas el comando anterior, verás algunos flags luego de «docker run» que se utilizan para dejar corriendo al contenedor. Estos comandos hacen lo siguiente:

  • -d ejecuta la aplicación en segundo plano.
  • -p 80:80 provee un mapeo desde el puerto del host al puerto del contenedor. Puedes obtener más información sobre mapeos aquí
  • docker/getting-started es la imagen de docker que se está utilizando.

Luego de ingresar el comendo, Docker reconocerá los flags, ejecutará el comando y buscará la imagen en tu sistema local. Si no tienes ninguna imagen con este nombre en tu sistema, Docker automáticamente lo buscará en Docker Hub, y en caso de encontrarlo, lo ejecutará. Para que tengas una idea, Docker Hub es a Docker lo que GitHub es a Git.

Dado que la imagen docker/getting-started está en Docker Hub, Docker la traerá directamente de allí. También puedes obtener esta imagen con el siguiente comando:

docker pull docker/getting-started

La imagen es una simple aplicación para manejar una lista de tareas escrita en Node.Js, pero para utilizarla como tutorial de Docker no requiere experiencia en JavaScript. Se puede encontrar información detallada en la página del tutorial o haciendo clic en http://localhost luego de ejecutar el contenedor.

Luego de dar los primeros pasos con Docker, es recomendable seguir el tutorial para ahondar en varios aspectos de Docker y Docker Desktop.

Deja un comentario

A %d blogueros les gusta esto: