Fundamentos de Docker

diego.coder26
6 min readAug 29, 2022
Photo by Venti Views on Unsplash

Artículo básico de la tecnología Docker. Composición, conceptos, arquitectura y comparaciones.

Docker

Docker es una plataforma de código abierto que permite la creación, implementación y ejecución de aplicaciones en contenedores. Los contenedores son unidades de software que incluyen todo lo necesario para que una aplicación se ejecute de manera independiente, incluyendo el código, las bibliotecas, las dependencias y las variables de entorno.

Docker nació sobre el concepto de los contenedores Linux, que son básicamente un conjunto de procesos separados del resto del sistema, pero llevado a una idea más global y multiplataforma. Docker resuelve problemas de versiones, dependencias y todas las configuraciones necesarias para que el producto funcione en ambientes productivos, reduciendo el tiempo, coste y margen de error considerablemente.

Conceptos clave de Docker

Para comprender Docker, es importante conocer algunos conceptos clave relacionados con esta plataforma, estos conceptos son:

  1. Contenedor: Un contenedor es una instancia aislada y portátil que de una aplicación en conjunto de todas sus dependencias, incluyendo el código fuente, bibliotecas y variables de entorno. Los contenedores se basan en imágenes y permiten ejecutar aplicaciones de forma consistente en cualquier entorno.
  2. Imagen: Se puede pensar en una imagen de Docker como un molde o una plantilla para crear contenedores. La imagen de Docker contiene todas las instrucciones y configuraciones necesarias para ejecutar una aplicación en un entorno de contenedor, así como todas las dependencias requeridas.
  3. Dockerfile: Es un archivo de texto plano que contiene instrucciones para construir una imagen de Docker. Define los pasos necesarios para configurar el entorno de la aplicación y generar una imagen lista para su ejecución en contenedores.
  4. Registro de Docker (Docker Hub): Es un repositorio en línea que almacena y distribuye imágenes de Docker. Docker Hub es el registro público de Docker y ofrece una amplia colección de imágenes preconstruidas que los desarrolladores pueden utilizar para sus aplicaciones.
  5. Docker Compose: Es una herramienta que permite definir y gestionar aplicaciones multi-contenedor. Utiliza un archivo YAML para configurar la estructura de los servicios, las redes y los volúmenes necesarios para desplegar una aplicación de forma coherente.
  6. Docker Swarm: Es una funcionalidad integrada en Docker que permite crear y administrar clústeres de contenedores. Docker Swarm proporciona capacidades de orquestación para escalar y equilibrar la carga entre múltiples contenedores y nodos.
  7. Orquestador de Contenedores: Es una herramienta que automatiza y coordina la implementación, administración y escalado de contenedores en clústeres. Docker Swarm y Kubernetes son ejemplos populares de orquestadores de contenedores.
  8. Volúmenes: Son mecanismos que permiten a los contenedores mantener datos persistentes más allá de su ciclo de vida. Los volúmenes se utilizan para compartir y persistir datos entre contenedores y el host.
  9. Redes: Docker ofrece opciones para configurar redes que permiten la comunicación entre contenedores y el host. Las redes permiten aislar y conectar contenedores de manera segura y flexible.
  10. Docker Desktop: Es una aplicación que permite utilizar Docker en sistemas operativos de escritorio, como Windows y macOS, proporcionando una interfaz gráfica para interactuar con contenedores y administrar recursos.

Características de Docker

Docker, como plataforma de contenedores, presenta varias características que lo hacen popular y útil en el desarrollo y despliegue de aplicaciones. A continuación, se presentan algunas de las características más destacadas de Docker:

  1. Portabilidad y compatibilidad: Los contenedores Docker son independientes del sistema operativo y pueden ejecutarse en cualquier plataforma que tenga Docker instalado, lo que permite una alta portabilidad y compatibilidad entre diferentes entornos de desarrollo y producción.
  2. Aislamiento: Los contenedores Docker ofrecen un alto grado de aislamiento entre las aplicaciones y sus dependencias, lo que significa que cada contenedor tiene su propio entorno de ejecución, sistema de archivos y recursos, lo que evita conflictos entre aplicaciones.
  3. Eficiencia y rendimiento: Los contenedores Docker son ligeros, ya que comparten el núcleo del sistema operativo del host, lo que reduce la sobrecarga y mejora el rendimiento en comparación con las máquinas virtuales tradicionales.
  4. Automatización: Docker se integra fácilmente con herramientas de automatización y orquestación como Docker Compose, Kubernetes y otros, lo que permite una gestión eficiente de contenedores y facilita el escalado y la orquestación de aplicaciones complejas.
  5. Gestión de imágenes: Docker utiliza imágenes para definir la configuración y dependencias de una aplicación. Las imágenes son versionadas y pueden ser compartidas, lo que facilita el despliegue consistente en diferentes entornos y la colaboración entre equipos de desarrollo.
  6. Rápido despliegue y escalabilidad: Docker permite implementar y escalar aplicaciones rápidamente debido a su naturaleza ligera y su capacidad para crear rápidamente nuevos contenedores a partir de imágenes existentes.
  7. Facilidad de uso: Docker proporciona una interfaz de línea de comandos y una interfaz gráfica de usuario (Docker Desktop) que facilita su uso tanto para desarrolladores como para operadores de infraestructuras.
  8. Ecosistema amplio: Docker ha creado un ecosistema robusto de herramientas y servicios complementarios, lo que permite a los desarrolladores y operadores aprovechar una amplia gama de funcionalidades para mejorar sus flujos de trabajo.
  9. Versionado y control de cambios: Docker facilita la gestión de versiones y control de cambios en aplicaciones, ya que las imágenes pueden versionarse y desplegarse fácilmente en diferentes entornos.
  10. Seguridad: Docker ofrece funcionalidades de seguridad, como la capacidad de limitar recursos, aislar procesos y controlar el acceso a la red, lo que ayuda a proteger las aplicaciones y datos sensibles.

Instalación de Docker

Docker está disponible en dos ediciones: Community y Enterprise. En donde la distinción radica en que la versión Enterprise posee administración avanzada de contenedores, soporte directo permanente, visualización de clústeres en paneles especiales y versiones certificadas.

A continuación algunas guías de referencia para la instalación dependiendo del SO anfitrión:

Arquitectura de docker

Docker utiliza una arquitectura cliente-servidor, en donde las diferentes piezas interactúan para poder crear, ejecutar y distribuir los contenedores. Destacando que al instalar Docker en nuestro sistema operativo, también se instalarán todas las herramientas necesarias para su funcionamiento.

  • Docker CLI (cliente): Es la interfaz de línea de comandos de Docker. Esta interfaz se comunica con Docker daemon para la ejecución de instrucciones. Docker CLI contiene múltiples comandos que nos ayudarán a crear, visualizar y destruir contenedores e imágenes.
  • Docker daemon (servidor): Docker daemon es la pieza que se encarga de administrar imágenes, contenedores y redes. Esta pieza de software funciona en segundo plano y recibe instrucciones desde nuestro CLI.

Hola mundo en Docker

Una vez instalado Docker en nuestro sistema operativo. Abrir una terminal y ejecutar el siguiente instrucción:

docker run hello-world

Con el comando run Docker instanciará un contenedor basado en la imagen hello-world obtenida desde Docker Hub.

Docker vs virtualización

Docker llega como una alternativa diferente a las tradicionales virtualizaciones, destacando la reducción de recursos y facilitación de despliegue. A continuación algunas diferencias destacables:

  1. Recursos: La máquina virtual tiene su sistema operativo invitado por encima del sistema operativo host, es decir, para realizar una virtualización se deben instanciar dos sistemas operativos, el virtualizado y el host. Mientras que los contenedores comparten el sistema operativo host evitando la sobrecarga de recursos.
  2. Portabilidad: Los contenedores Docker son fácilmente portables porque no tienen sistemas operativos separados. Un contenedor se puede portar a un sistema operativo diferente y puede iniciarse inmediatamente. Por otro lado, las máquinas virtuales tienen su sistema operativos separado, por lo que portar una máquina virtual es difícil en comparación con los contenedores, y también lleva mucho tiempo portar una máquina virtual debido a su tamaño.
  3. Rendimiento: La arquitectura ligera de Docker hace que los contenedores pueden iniciarse más rápido en comparación con las máquinas virtuales.

Recursos Docker

Gracias por haber llegado hasta aquí, si encuentras esto útil, no olvides aplaudir 👏 . Suscríbete para obtener más contenido 🔔.

Si necesita ayuda adicional, comunícate conmigo 🤠.

Muchas gracias por leer, agradezco su tiempo.

--

--

diego.coder26

Hello, my name is Diego! 👦, I am Software Engineer that writes about computer science, mathematics, and personal growth. 👉 😃 linktr.ee/diego.coder