Jump to section

¿Qué es Docker y cómo funciona?

Copiar URL

El término "Docker" se aplica a diferentes conceptos, entre los que se incluyen un proyecto de la comunidad open source y sus herramientas; Docker Inc., la principal empresa promotora del proyecto; y las herramientas que la empresa respalda formalmente. El hecho de que las tecnologías y la compañía compartan el mismo nombre puede ser confuso.

Esto es lo que debe saber:

  • El sistema de software de TI llamado "Docker" es la tecnología de organización en contenedores que posibilita la creación y el uso de los contenedores de Linux®.
  • La comunidad open source Docker se encarga de mejorar estas tecnologías para beneficiar a todos los usuarios.
  • La empresa, Docker Inc., se basa en el trabajo de la comunidad Docker para aumentar la seguridad de las herramientas y comparte los avances con el resto de la comunidad. Entonces, brinda soporte a las tecnologías mejoradas y reforzadas para los clientes empresariales.

Con Docker, puede utilizar los contenedores como máquinas virtuales muy livianas y modulares, y obtiene la flexibilidad necesaria para crearlos, implementarlos, copiarlos y trasladarlos de un entorno a otro, lo cual le permite optimizar las aplicaciones para la nube.

La tecnología Docker utiliza el kernel de Linux y sus funciones, como los grupos de control y los espacios de nombre, para dividir los procesos y ejecutarlos de manera independiente. El propósito de los contenedores es ejecutar varios procesos y aplicaciones por separado para que se pueda aprovechar mejor la infraestructura y, al mismo tiempo, conservar la seguridad que se obtendría con los sistemas individuales.

Las herramientas de los contenedores, como Docker, proporcionan un modelo de implementación basado en imágenes. Esto permite compartir fácilmente una aplicación o un conjunto de servicios, con todas las dependencias en varios entornos. Docker también automatiza la implementación de las aplicaciones (o los conjuntos de procesos que las constituyen) en el entorno de contenedores.

Estas herramientas están diseñadas a partir de los contenedores de Linux, por eso la tecnología Docker es sencilla y única. Además, ofrecen a los usuarios acceso sin precedentes a las aplicaciones, la posibilidad de realizar implementaciones en poco tiempo y el control sobre las versiones y su distribución.

Si bien ambos conceptos suelen confundirse, no son iguales. Originalmente, Docker se diseñó a partir de la tecnología LXC, la cual por lo general se asocia con los contenedores "tradicionales" de Linux, pero desde aquel entonces se ha ido alejando de esa dependencia. LXC funcionaba como una virtualización ligera, pero no ofrecía una buena experiencia al desarrollador ni al usuario. La tecnología Docker no solo ofrece la capacidad para ejecutar los contenedores, sino que también facilita su creación y diseño, así como el envío y el control de versiones de las imágenes, entre otras funciones.

Los contenedores de Linux tradicionales usan un sistema init que puede gestionar varios procesos. Esto significa que las aplicaciones completas se pueden ejecutar como una sola. La tecnología Docker favorece la división de las aplicaciones en sus procesos individuales y ofrece las herramientas para hacerlo. Este enfoque de separación de los elementos tiene sus ventajas.

Modularidad

El enfoque de Docker sobre la organización en contenedores se centra en la capacidad de separar una parte de la aplicación para actualizarla o repararla, sin necesidad de deshabilitarla por completo. Además de aprovechar este modelo basado en los microservicios, puede intercambiar procesos entre varias aplicaciones casi de la misma forma en que funciona la arquitectura orientada a los servicios (SOA).

Capas y control de versiones de imágenes

Cada archivo de imagen Docker está compuesto por varias capas que conforman una sola imagen. Cuando un usuario especifica un comando, como ejecutar o copiar, la imagen cambia, y se crea una capa nueva.

Docker reutiliza las capas para agilizar el diseño de los contenedores nuevos. Los cambios intermedios se comparten entre las imágenes para mejorar aún más la agilidad, el tamaño y la eficiencia. El control de versiones también es propio de la creación de capas: el registro incorporado de los cambios le brinda el control total de las imágenes de contenedores cada vez que se produce una modificación.

Restauración

Uno de los mayores beneficios de las capas es la capacidad de restauración. Todas las imágenes cuentan con capas. Si no le gusta la iteración actual de una imagen, puede restaurarla a una versión anterior. Esto respalda el enfoque de desarrollo ágil y permite lograr la integración e implementación continuas (CI/CD) desde la perspectiva de las herramientas.

Implementación rápida

Antes, se necesitaban varios días para poner en marcha un sistema de hardware nuevo, implementarlo y ponerlo a disposición de los usuarios, lo cual implicaba un esfuerzo y un costo abrumadores. Con los contenedores basados en Docker, la implementación se puede realizar en cuestión de segundos. Cada proceso se encuentra en un contenedor distinto, por lo que puede compartirlos con aplicaciones nuevas rápidamente. Además, ya que no es necesario iniciar el sistema operativo para agregar o trasladar un contenedor, los tiempos de implementación son mucho más cortos, y puede crear datos y eliminar aquellos que generen los contenedores de manera fácil y rentable, sin preocupaciones.

En definitiva, la tecnología Docker tiene un enfoque más detallado y controlable, que se basa en los microservicios y que prioriza la eficiencia.

Docker, por sí solo, puede gestionar contenedores individuales. Si comienza a utilizar cada vez más contenedores y aplicaciones que se alojan en ellos con cientos de elementos, se dificultará su gestión y organización. En algún momento, deberá cambiar el enfoque y agrupar los contenedores para prestar los servicios, como las redes, la seguridad y la telemetría, entre otros, en todos los contenedores. Allí entra en juego Kubernetes.

 

Docker no ofrece las mismas funciones tipo UNIX que se obtienen con los contenedores tradicionales de Linux, como la capacidad para usar los procesos como cron o syslog dentro del contenedor, junto con la aplicación. Esta tecnología también implica otras limitaciones, por ejemplo, en cuanto a la eliminación de los procesos derivados de los secundarios después de borrar estos últimos, lo cual se realiza de manera natural en los contenedores tradicionales de Linux. A pesar de que no resulte evidente a simple vista, se pueden reducir estas complicaciones al modificar el archivo de configuración y establecer esas habilidades desde el comienzo.

Además, hay otros subsistemas y dispositivos de Linux que no cuentan con espacios de nombres, como SELinux, los grupos de control y los dispositivos /dev/sd*. Esto implica que, si un atacante obtiene control de estos subsistemas, el host se ve comprometido. El hecho de compartir el kernel del host con los contenedores para mantener la agilidad podría poner en riesgo la seguridad. En cambio, las máquinas virtuales son diferentes, ya que están bien separadas del sistema host.

 

El daemon de Docker también puede representar un problema en materia de seguridad. Para usar y ejecutar los contenedores de Docker, es muy probable que utilice el daemon de la misma tecnología, un tiempo de ejecución persistente para los contenedores que requiere privilegios de superusuario, por lo que se debe prestar especial atención a dónde se encuentra el proceso y quiénes obtienen acceso a él. Por ejemplo, un daemon local posee una superficie de ataque más pequeña que uno que se encuentra en una ubicación más pública, como un servidor web.

Keep reading

Article

What's a Linux container?

A Linux container is a set of processes isolated from the system, running from a distinct image that provides all the files necessary to support the processes.

Article

Containers vs VMs

Linux containers and virtual machines (VMs) are packaged computing environments that combine various IT components and isolate them from the rest of the system.

Article

What is container orchestration?

Container orchestration automates the deployment, management, scaling, and networking of containers.

Más información sobre los contenedores

Productos

Plataforma de contenedores de Kubernetes empresarial con operaciones automatizadas integrales para gestionar implementaciones de nube híbrida, multicloud y edge computing.

Contenido adicional

Lista de verificación

Desarrollo de aplicaciones en contenedores: cinco temas para analizar con su equipo

Ebook

Los tres aspectos más importantes que debe tener en cuenta a la hora de seleccionar una plataforma de Kubernetes

Capacitación

Curso de capacitación gratuito

Running Containers with Red Hat Technical Overview

Curso de capacitación gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Curso de capacitación gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Obtenga más contenido como este

Suscríbase a nuestro boletín informativo: Red Hat Shares.