Docker es una plataforma de código abierto (open source) que utiliza tecnología de contenedores para simplificar el desarrollo, la implementación y la ejecución de aplicaciones en entornos informáticos aislados. En este artículo, entenderemos qué es un contenedor, los conceptos principales relacionados con Docker y el impacto que esta plataforma tiene en el desarrollo de software […]

¡Descúbrelo!

Docker es una plataforma de código abierto (open source) que utiliza tecnología de contenedores para simplificar el desarrollo, la implementación y la ejecución de aplicaciones en entornos informáticos aislados.

En este artículo, entenderemos qué es un contenedor, los conceptos principales relacionados con Docker y el impacto que esta plataforma tiene en el desarrollo de software y el alojamiento de sistemas.

¡Compruébelo!

[elementor-template id=”24446″]

¿Qué es un Contenedor?

Un Contenedor es una forma de virtualización a nivel del sistema operativo.

A diferencia de la virtualización por hipervisor (ej: VMware y VirtualBox), que crea máquinas virtuales completas con sistemas operativos totalmente independientes, los contenedores comparten el kernel del sistema operativo del host, permitiendo que múltiples instancias aisladas del espacio de usuario se ejecuten en el mismo entorno.

Plataformas como Docker reducen drásticamente la sobrecarga de recursos y pueden acelerar el tiempo de inicio en comparación con las máquinas virtuales.

Diagrama representativo sobre la contenedorización.
Fuente: The Docker Book | James Turnbull

¿Para qué sirve Docker?

Docker es una herramienta poderosa que ofrece aislamiento a través de contenedores.

Los contenedores crean entornos informáticos aislados para pruebas y sirven como “bloques de construcción” consistentes y reutilizables para los servicios.

Aquí hay algunos ejemplos de cómo se puede utilizar Docker:

Entorno de Pruebas

  • Los desarrolladores pueden crear, ejecutar y compartir contenedores Docker en sus entornos locales.
  • Los contenedores creados en el entorno de desarrollo se pueden promover para pruebas y luego para producción, asegurando la consistencia entre etapas.

Auto-Alojamiento (Self-Hosting)

Ejecución de servicios y aplicaciones independientes

  • Permite ejecutar servicios y aplicaciones de forma consistente en diferentes entornos.
  • Ideal para arquitecturas orientadas a servicios e implementaciones basadas en microservicios.

Desarrollo de Aplicaciones

Implementaciones de Alto Rendimiento

Pruebas aisladas en integración continua (CI)

  • Herramientas como Jenkins CI utilizan Docker para crear instancias aisladas para la ejecución de pruebas.
  • Reduce el riesgo de interferencias entre pruebas y mejora la confiabilidad del proceso de CI.

Construcción y prueba de arquitecturas complejas

  • Permite replicar y probar aplicaciones complejas en un host local antes de implementarlas en entornos de producción.

Creación de infraestructuras multiusuario al estilo de Plataforma como Servicio (PaaS)

  • Docker puede ser la base para construir plataformas que admitan a múltiples usuarios y servicios.

Entornos ligeros e independientes para el aprendizaje y desarrollo

  • Ideal para crear áreas de pruebas aisladas (sandboxes) para:
  • Probar tecnologías como shells Unix.
  • Aprender y enseñar lenguajes de programación.
  • Realizar experimentos sin impactar el sistema principal.

Aplicaciones SaaS (Software como Servicio)

  • Docker se puede utilizar para crear e implementar aplicaciones SaaS, permitiendo una gestión eficiente y escalabilidad.

Implementaciones de alto rendimiento e hiperescalables

  • Los contenedores son extremadamente ligeros, lo que permite configurar múltiples hosts rápidamente para satisfacer demandas a gran escala.

¿Cómo funciona Docker?

Docker introduce un mecanismo de implementación de aplicaciones sobre un entorno de ejecución basado en contenedores virtualizados.

Este mecanismo proporciona un flujo de trabajo eficiente que facilita la transición de código del entorno de desarrollo local al entorno de pruebas y producción.

Arquitectura de Docker

Docker utiliza una arquitectura basada en el modelo cliente-servidor.

El cliente Docker se comunica con el demonio de Docker (servidor), que se encarga del trabajo pesado de crear, ejecutar y distribuir sus contenedores Docker.

El cliente y el demonio de Docker pueden ejecutarse en el mismo sistema, o puede conectar un cliente a un demonio de Docker remoto.

La comunicación entre el cliente y el demonio utiliza una API REST, a través de sockets UNIX o una interfaz de red.

Cliente Docker

El cliente Docker (docker) es la principal interfaz que utilizan muchos usuarios de Docker para interactuar con Docker.

Cuando utiliza comandos como docker run, el cliente envía estos comandos al demonio (dockerd), que los ejecuta.

El cliente Docker utiliza la API de Docker y es capaz de comunicarse con más de un demonio simultáneamente.

Servidor Docker (Demonio)

El demonio Docker (dockerd) escucha las solicitudes de la API de Docker y gestiona objetos de Docker como imágenes, contenedores, redes y volúmenes.

Además, el demonio también puede comunicarse con otros demonios para gestionar servicios de Docker en un entorno distribuido.

Objetos de Docker

Al utilizar Docker, está creando y utilizando objetos como imágenes, contenedores, redes, volúmenes, plugins y otros objetos.

Imágenes

Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor Docker.

A menudo, una imagen se basa en otra imagen, con alguna personalización adicional. Por ejemplo, puede compilar una imagen basándose en la imagen de ubuntu, pero instalando el servidor web Apache, su aplicación y los detalles de configuración necesarios para que su aplicación se ejecute.

Usted puede crear sus propias imágenes o puede utilizar únicamente las que otros han creado y publicado en un registro público.

Para construir su propia imagen, debe crear un Dockerfile.

El Dockerfile utiliza una sintaxis sencilla para definir los pasos necesarios para crear la imagen y ejecutarla.

Cada instrucción en un Dockerfile crea una capa en la imagen.

Cuando cambia el Dockerfile y reconstruye la imagen, solo se reconstruyen las capas que han cambiado. Esto es parte de lo que hace que las imágenes sean livianas, pequeñas y rápidas, especialmente en comparación con otras tecnologías de virtualización.

Contenedores

Un contenedor es una instancia ejecutable de una imagen.

Puede crear, iniciar, detener, mover o eliminar un contenedor utilizando la API de Docker o la CLI de Docker.

Puede conectar un contenedor a una o más redes, adjuntarle almacenamiento o incluso crear una nueva imagen basada en su estado actual.

Por defecto, un contenedor está relativamente bien aislado de otros contenedores y de su máquina host. Puede controlar cuán aislada está la red, el almacenamiento u otros subsistemas subyacentes de un contenedor respecto a otros contenedores o a la máquina host.

Un contenedor está definido por su imagen, así como por las opciones de configuración que le proporcione al crearlo o iniciarlo.

Cuando se elimina un contenedor, desaparece cualquier cambio en su estado que no se haya guardado en el almacenamiento persistente.

Registros

Un registro de Docker almacena imágenes de Docker.

Docker Hub es un registro público que cualquiera puede usar y Docker está configurado para buscar imágenes en Docker Hub por defecto.

Incluso puede ejecutar su propio registro privado.

Cuando utiliza los comandos docker pull o docker run, las imágenes requeridas se extraen de su registro configurado.

Cuando utiliza el comando docker push, su imagen se envía a su registro configurado.

Instalación de Docker