Inicio Topics Docker ¿Qué es Docker?
Programe en Docker dentro de OpenShift Regístrese para recibir actualizaciones sobre temas relacionados con la nube
Ilustración con collage de pictogramas de monitor de ordenador, servidor, nubes, puntos

Publicado: 6 junio de 2024
Colaboradores: Stephanie Susnjara, Ian Smalley

¿Qué es Docker?

Docker es una plataforma de código abierto que permite a los desarrolladores crear, implementar, ejecutar, actualizar y gestionar aplicaciones en contenedores.

Los contenedores son componentes estandarizados y ejecutables que combinan el código fuente de la aplicación con las bibliotecas del sistema operativo (SO) y las dependencias necesarias para ejecutar ese código en cualquier entorno.

Es importante señalar que cuando la gente habla de Docker, normalmente se refiere a Docker Engine, el tiempo de ejecución para crear y ejecutar contenedores. Docker también se refiere a Docker, Inc.1, la empresa que vende la versión comercial de Docker. También está relacionado con el proyecto de código Docker2, al que contribuyen Docker, Inc. y muchas otras organizaciones y personas.

Los contenedores simplifican el desarrollo y la entrega de aplicaciones distribuidas. Se han hecho cada vez más populares a medida que las organizaciones pasan al desarrollo nativo de la nube y a los entornos híbridos multinube. Los desarrolladores pueden crear contenedores sin Docker trabajando directamente con las capacidades integradas en Linux y otros sistemas operativos, pero Docker hace que la creación de contenedores sea más rápida y sencilla. Cuando se escribió este artículo, Docker informó que más de 20 millones de desarrolladores usan la plataforma mensualmente3. Al igual que otras tecnologías de contenerización, incluido Kubernetes, Docker desempeña un papel crucial en el desarrollo de software moderno, específicamente en la arquitectura de microservicios.

¿Qué son los microservicios?

En contraste con el enfoque monolítico tradicional de una aplicación grande y estrechamente acoplada, los microservicios proporcionan un marco arquitectónico nativo de la nube. Este marco compone una sola aplicación a partir de muchos componentes o servicios más pequeños, de acoplamiento flexible e implementables de forma independiente. Cada servicio puede contenerizarse mediante Docker, lo que simplifica la implementación y permite a los equipos desplegar nuevas versiones y escalar las aplicaciones según sea necesario. 

La IA generativa y el valor de la nube híbrida

Descubra cómo las organizaciones pueden escalar el impacto de la IA usando la nube híbrida para impulsar los resultados empresariales.

Contenido relacionado

Regístrese para recibir la guía sobre la nube híbrida

¿Cómo funcionan los contenedores?

Los contenedores son posibles gracias a las capacidades de aislamiento de procesos y virtualización integradas en el núcleo de Linux. Estas capacidades incluyen grupos de control (grupos C) para asignar recursos entre procesos y espacios de nombres para restringir el acceso o visibilidad de un proceso a otros recursos o áreas del sistema.

Los contenedores permiten que varias aplicaciones compartan los recursos de una única instancia del sistema operativo anfitrión. Este uso compartido es similar al modo en que un hipervisor permite que varias máquinas virtuales (VM) compartan la unidad central de procesamiento (CPU) de un solo servidor de hardware, así como otros recursos. 

La tecnología de contenedores ofrece todas las funciones y ventajas de las máquinas virtuales (VM), incluido el aislamiento de aplicaciones y la escalabilidad rentable, además de otras ventajas significativas:

  • Menor peso: a diferencia de las máquinas virtuales, los contenedores no transportan la carga útil de una instancia completa de sistema operativo e hipervisor. Incluyen solo los procesos del sistema operativo y las dependencias necesarias para ejecutar el código. Los tamaños de los contenedores se miden en megabytes (frente a los gigabytes de algunas máquinas virtuales), aprovechan mejor la capacidad del hardware y tienen tiempos de arranque más rápidos. 

  • Mejora de la productividad: las aplicaciones en contenedores se pueden escribir una vez y ejecutarse en cualquier lugar. En comparación con las máquinas virtuales, los contenedores son más rápidos y fáciles de implementar, aprovisionar y reiniciar. 

  • Mayor eficiencia: con los contenedores, los desarrolladores pueden ejecutar varias copias de una aplicación en el mismo hardware que utilizando máquinas virtuales. Esta eficiencia puede reducir el gasto en la nube.

Las organizaciones que utilizan contenedores informan de muchos otros beneficios, como la mejora de la calidad de las aplicaciones, una respuesta más rápida a los cambios del mercado y mucho más. 

¿Por qué utilizar Docker y por qué es tan popular?

Docker es la herramienta de contenerización más utilizada, con una cuota de mercado del 82,84 %.4 Docker es tan popular hoy en día que "Docker" y "contenedores" se usan indistintamente. Sin embargo, las primeras tecnologías relacionadas con los contenedores estuvieron disponibles durante años, incluso décadas5, antes de que Docker se lanzara públicamente como código abierto en 2013. 

En particular, en 2008, LinuXContainers (LXC) se implementó en el núcleo de Linux, permitiendo completamente la virtualización para una sola instancia de Linux. Aunque LXC se sigue utilizando hoy en día, existen nuevas tecnologías del núcleo de Linux. Ubuntu, un moderno sistema operativo Linux de código abierto, también ofrece esta posibilidad. Docker permite a los desarrolladores acceder a estas capacidades nativas de contenerización mediante el uso de comandos simples y automatizarlas a través de una interfaz de programación de aplicaciones (API) que ahorra trabajo.  

Ventajas de Docker frente a LXC

El uso de Docker tiene muchas ventajas en comparación con el LXC más antiguo y menos compatible.

Portabilidad de contenedores mejorada y fluida

Aunque los contenedores LXC suelen hacer referencia a configuraciones específicas de la máquina, los contenedores Docker se ejecutan sin modificaciones en cualquier escritorio, centro de datos o entorno de computación en la nube

Actualizaciones aún más ligeras y granulares

Con Docker, los desarrolladores pueden combinar varios procesos en un único contenedor. Esta flexibilidad permite crear una aplicación que puede seguir funcionando mientras una de sus partes está fuera de servicio para una actualización o reparación. 

Creación automatizada de contenedores

Docker puede crear automáticamente un contenedor basado en el código fuente de la aplicación. 

Control de versiones de contenedores

Docker puede realizar un seguimiento de las versiones de una imagen de contenedor, volver a versiones anteriores y rastrear quién creó una versión y cómo. Docker puede incluso cargar solo los deltas (versiones parciales de los módulos de software) entre una versión existente y una nueva. 

Reutilización de contenedores

Los desarrolladores pueden acceder a un registro de código abierto que contiene miles de contenedores contribuidos por el usuario. 

Hoy en día, la contenerización Docker también funciona con Microsoft Windows Server y Apple MacOS. Los desarrolladores pueden ejecutar contenedores Docker en cualquier sistema operativo. Todos los principales proveedores de servicios en la nube (CSP), incluidos Amazon Web Services (AWS), Microsoft Azure, Google Cloud Services e IBM Cloud, ofrecen servicios específicos para ayudar a los desarrolladores a crear, desplegar y ejecutar aplicaciones en contenedores con Docker.

Arquitectura, términos y herramientas de Docker

Docker utiliza una arquitectura cliente/servidor. A continuación se muestra un desglose de los componentes principales asociados a Docker, junto con otros términos y herramientas de Docker.

Host Docker: es una máquina física o virtual que ejecuta Linux (u otro sistema operativo compatible con Docker-Engine).

Docker Engine:  es una aplicación cliente/servidor que consta del demonio de Docker, una API de Docker que interactúa con el demonio y una interfaz de línea de comandos (CLI) que se comunica con el demonio. 

Docker daemon:es un servicio que crea y administra imágenes Docker, utilizando los comandos del cliente. Esencialmente, daemon sirve como centro de control para implementación Docker.

Cliente Docker: el cliente Docker proporciona la CLI que accede a la API de Docker (una API REST) para comunicarse con el daemon Docker a través de los sockets Unix o una interfaz de red. El cliente puede conectarse a un daemon de forma remota, o un desarrollador puede ejecutar el daemon y el cliente en el mismo sistema informático.

Objetos de Docker: los objetos de Docker son componentes de una implementación de Docker que ayudan a empaquetar y distribuir aplicaciones. Incluyen imágenes, contenedores, redes, volúmenes, plug-ins y mucho más.

Contenedores Docker: Los contenedores Docker son las instancias vivas y en ejecución de las imágenes Docker. Mientras que las imágenes Docker son archivos de sólo lectura, los contenedores son contenidos vivos, efímeros y ejecutables. Los usuarios pueden interactuar con ellos y los administradores pueden ajustar su configuración y condiciones mediante comandos Docker. 

Imágenes de Docker: las imágenes de Docker contienen el código fuente de la aplicación ejecutable y todas las herramientas, bibliotecas y dependencias que el código de la aplicación necesita para ejecutarse como contenedor. Cuando ejecuta la imagen Docker, se convierte en una instancia (o varias instancias) del contenedor. 

Es posible crear imágenes de Docker desde cero, pero la mayoría de los desarrolladores las extraen de repositorios comunes. Los desarrolladores pueden crear varias imágenes de Docker a partir de una única imagen base y compartirán los puntos en común de su pila. 

Las imágenes Docker están formadas por capas y cada capa corresponde a una versión de la imagen. Cada vez que un desarrollador realiza cambios en la imagen, se crea una nueva capa superior que sustituye a la anterior como versión actual de la imagen. Las capas anteriores se guardan para revertirlas o para reutilizarlas en otros proyectos. 

Cada vez que se crea un contenedor a partir de una imagen Docker, se crea otra capa nueva denominada capa de contenedor. Los cambios realizados en el contenedor, como agregar o eliminar archivos, se guardan en la capa de contenedor y estos cambios solo existen mientras se ejecuta el contenedor.

Este proceso iterativo de creación de imágenes aumenta la eficiencia general, ya que se pueden ejecutar varias instancias de contenedor en vivo desde una sola imagen base. Cuando lo hacen, utilizan una pila común. 

Docker build: Docker build es un comando que tiene herramientas y características para crear imágenes de Docker.

Dockerfile: cada contenedor Docker comienza con un simple archivo de texto que contiene instrucciones sobre cómo construir la imagen del contenedor Docker. Dockerfile automatiza el proceso de creación de imágenes Docker. Básicamente, es una lista de instrucciones de la CLI que Docker Engine ejecutará para ensamblar la imagen. La lista de comandos de Docker es enorme pero está estandarizada: las operaciones de Docker funcionan igual independientemente del contenido, la infraestructura u otras variables de entorno. 

Documentación de Docker: o documentos de Docker, se refiere a la biblioteca oficial de recursos, manuales y guías de Docker para crear aplicaciones en contenedores.

Docker Hub: 6 es el repositorio público de imágenes Docker, que se llama a sí mismo la biblioteca y comunidad más grande del mundo para imágenes de contenedores7. Contiene más de 100 000 imágenes de contenedores procedentes de proveedores de software comercial, proyectos de código abierto y desarrolladores individuales. Docker Hub incluye imágenes producidas por Docker, Inc., imágenes certificadas que pertenecen a Docker Trusted Registry y miles de otras imágenes. 

Todos los usuarios de Docker Hub pueden compartir sus imágenes a voluntad. También pueden descargar imágenes base predefinidas del sistema de archivos médicos como punto de partida de cualquier proyecto de contenerización. 

Existen otros repositorios de imágenes, como GitHub8. GitHub es un servicio de alojamiento de repositorios muy conocido por sus herramientas de desarrollo de aplicaciones y como plataforma que fomenta la colaboración y la comunicación. Los usuarios de Docker Hub pueden crear un repositorio que puede contener muchas imágenes. El repositorio puede ser público o privado y vinculado a cuentas de GitHub o BitBucket. 

Docker Desktop: es una aplicación para Mac o Windows que incluye Docker Engine, Docker CLI Client, Docker Compose, Kubernetes y otros. También proporciona acceso a Docker Hub. 

Registro de Docker: es un sistema de almacenamiento y distribución escalable de código abierto para imágenes Docker. Permite a los desarrolladores realizar un seguimiento de las versiones de las imágenes en los repositorios mediante el etiquetado para la identificación. Este seguimiento e identificación se realiza mediante Git, una herramienta de control de versiones. 

Complementos de Docker: los desarrolladores utilizan complementos para hacer que Docker Engine sea aún más funcional. En el sistema de complementos de Docker Engine se incluyen varios complementos de Docker que admiten autorización, volumen y red; también se pueden cargar complementos de terceros. 

Extensiones Docker: permiten a los desarrolladores utilizar herramientas de terceros dentro de Docker Desktop para ampliar sus funciones. Las extensiones para herramientas de desarrolladores incluyen desarrollo de aplicaciones Kubernetes, seguridad, observabilidad y más. 

Docker Compose: los desarrolladores pueden usar Docker Compose para administrar aplicaciones de varios contenedores, donde todos los contenedores se ejecutan en el mismo host de Docker. Docker Compose crea un archivo YAML (.YML) que especifica qué servicios se incluyen en la aplicación y puede implementar y ejecutar contenedores con un solo comando. Dado que la sintaxis YAML es independiente del lenguaje, los archivos YAML pueden utilizarse en programas escritos en Java, Python, Ruby y muchos otros lenguajes. 

Los desarrolladores también pueden utilizar Docker Compose para definir volúmenes persistentes para el almacenamiento, especificar nodos base y documentar y configurar dependencias de servicios. 

Kubernetes y orquestación de contenedores

Cuando se ejecutan solo unos pocos contenedores, administrar una aplicación dentro de Docker Engine, el tiempo de ejecución de facto de la industria, es bastante simple. Sin embargo, para implementaciones que comprenden miles de contenedores y cientos de servicios, es casi imposible monitorizar y administrar los ciclos de vida de los contenedores sin una herramienta de orquestación de contenedores

Aunque Docker incluye su propia herramienta de orquestación (llamada Docker Swarm), Kubernetes es el estándar del sector. Otras plataformas populares de orquestación de contenedores incluyen Apache Mesos y Nomad.

Kubernetes es una plataforma de orquestación de contenedores de código abierto descendiente de Borg, un proyecto desarrollado para uso interno en Google. Presentado al público en 2014, Kubernetes programa y automatiza tareas integrales para gestionar arquitecturas basadas en contenedores, incluida la implementación de contenedores, actualizaciones, detección de servicios, aprovisionamiento de almacenamiento, equilibrio de carga, monitorización del estado y más. En 2015, Google donó Kubernetes a la Cloud Native Computing Foundation (CNCF)9, el centro de código abierto y proveedor neutral de computación nativa de la nube. 

Además, el ecosistema de herramientas de código abierto para Kubernetes, incluidos IstioKNative y  Tekton, permite a las organizaciones implementar una plataforma como servicio (PaaS) de alta productividad para aplicaciones en contenedores. Este ecosistema también proporciona una vía de acceso más rápida a la informática sin servidor.

Estándares de la industria portuaria y de contenedores

Fundada en 2015 después de que Docker donara la especificación de la imagen del contenedor y el código de tiempo de ejecución runc, la Open Container Initiative (OCI)10 es un proyecto de la Fundación Linux comprometido con la creación de estándares abiertos de la industria en torno al formato y el tiempo de ejecución de la imagen del contenedor. La OCI está formada por empresas líderes, como Docker, IBM y Red Hat. Apoya la innovación al tiempo que ayuda a las organizaciones a evitar el vendor lock-in. 

Aunque Docker es la tecnología de contenedores más conocida y utilizada, el ecosistema más amplio se ha estandarizado en contenedores y otras alternativas, incluidas LXC, CRI-O, Podman y otras. En 2017, Docker donó el proyecto en contenedores a la CNCF. Containerd es un tiempo de ejecución de contenedor estándar de la industria que utiliza runc y es el tiempo de ejecución de contenedor principal de Docker Engine.

Seguridad de Docker

La complejidad que rodea a las cargas de trabajo en contenedores exige implantar y mantener controles de seguridad que salvaguarden los contenedores y su infraestructura subyacente. Las prácticas de seguridad de los contenedores Docker están diseñadas para proteger las aplicaciones en contenedores de riesgos como las brechas de seguridad, el malware y los malos actores. 

Dado que los contenedores de Docker están aislados entre sí y del sistema host, tienen un nivel de seguridad inherente por diseño. Sin embargo, este aislamiento no es absoluto. La seguridad de Docker gira en torno a un marco holístico de zero trust que abarca el tiempo de ejecución, la construcción y la orquestación de contenedores. 

La necesidad de Docker y otras medidas de seguridad relacionadas con los contenedores ha aumentado la popularidad de DevSecOps. Se trata de un enfoque de la seguridad que automatiza la integración de prácticas de seguridad en cada fase del ciclo de vida del desarrollo de software, desde el diseño inicial hasta la integración, las pruebas, la entrega y la implementación. Además, las mejores prácticas de seguridad de Docker incluyen herramientas y soluciones de seguridad de contenedores de terceros, incluidos el escaneado y la monitorización, que pueden detectar problemas de seguridad antes de que afecten a la producción.

Casos de uso de Docker
Migración a la nube

La portabilidad de Docker simplifica y acelera el proceso de migración a la nube desde diversos entornos, ya sea para mover datos, aplicaciones y cargas de trabajo de un centro de datos local a una infraestructura basada en la nube o de un entorno de nube a otro.

Arquitectura de microservicios (microservicios)

Según Statista, más del 85 % de las grandes organizaciones globales utilizan microservicios para el desarrollo de sus aplicaciones11. Docker simplifica la implementación de aplicaciones, ya que cada microservicio se puede incluir en contenedores y escalar y administrar de forma independiente, lo que elimina la necesidad de que los desarrolladores configuren y administren entornos particulares. 

Integración continua y entrega continua (CI/CD)

Docker es ideal para procesos de integración continua y entrega continua (CI/CD), ya que proporciona un entorno consistente para probar e implementar aplicaciones, lo que reduce los posibles errores durante la implementación.

DevOps

La combinación de microservicios como enfoque de desarrollo de software y Docker crea una base sólida para los equipos de DevOps. Les permite adoptar prácticas ágiles para que puedan iterar y experimentar rápidamente, lo cual es crucial para entregar software y servicios a la velocidad que exige el mercado. 

Implementación de multinube híbrida

Una tecnología ligera en contenedores como Docker facilita el traslado de aplicaciones a diferentes entornos. Todos los principales proveedores de servicios en la nube ofrecen servicios de desarrollo y gestión relacionados con Docker que permiten ejecutar Docker en entornos de nube híbrida, que unifican la configuración en las instalaciones, pública, privada y perimetral. Docker puede implementarse fácilmente en infraestructuras de TI multinube, es decir, servicios en la nube de más de un proveedor.

Contenedores como servicio (CaaS)

Los contenedores como servicio (CaaS) permiten a los desarrolladores administrar e implementar aplicaciones en contenedores, lo que facilita la ejecución de contenedores de Docker a escala. Todos los principales CSP ofrecen CaaS como parte de sus carteras de servicios en la nube, junto con infraestructura como servicio (IaaS), software como servicio (SaaS), etc.

Inteligencia artificial/machine learning (IA/ML)

Docker acelera el desarrollo de la inteligencia artificial y el machine learning con un desarrollo de aplicaciones rápido, fácil y portátil, lo que acelera la innovación y el tiempo de comercialización. Además, Docker Hub alberga cientos de imágenes de AL/ML que respaldan aún más a los equipos de desarrollo de estos departamentos. En 2023, Docker lanzó Docker AI12, que ofrece a los desarrolladores una guía automatizada específica del contexto cuando editan un archivo Docker o Docker Compose. 

Soluciones relacionadas
Red Hat OpenShift on IBM Cloud

Explore cómo Red Hat OpenShift on IBM Cloud utiliza Red Hat OpenShift en entornos públicos e híbridos para obtener velocidad, capacidad de respuesta al mercado, escalabilidad y fiabilidad.

Explore Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite 

Utilice IBM Cloud Satellite para iniciar servicios cloud coherentes en cualquier lugar: en las instalaciones, en el perímetro y en entornos de cloud público.

Explore IBM Cloud Satellite
Soluciones de nube híbrida

Haga avanzar su viaje hacia la nube y la IA. Comience evaluando las inversiones en TI y diseñando una base abierta e integrada a la que se pueda acceder de forma rápida y coherente en todos los entornos digitales.

Explore las soluciones de nube híbrida
IBM Cloud Container Registry

Almacene y distribuya imágenes de contenedores en un registro privado totalmente gestionado. Inserte imágenes privadas para ejecutarlas cómodamente en IBM Cloud Kubernetes Service y otros entornos de tiempo de ejecución.  

Explore IBM Cloud Container Registry
Dé el siguiente paso

Red Hat OpenShift on IBM Cloud ofrece a los desarrolladores una forma rápida y segura de contenerizar e implementar cargas de trabajo empresariales en clústeres Kubernetes. Descargue las tareas tediosas y repetitivas que implican la gestión de la seguridad, la gestión de la conformidad, la gestión de la implementación y la gestión del ciclo de vida continuo. 

Explore Red Hat OpenShift on IBM Cloud Empiece gratis
Notas a pie de página

Acerca de Docker (enlace externo a ibm.com), Docker

Proyectos de código abierto, (enlace externo a ibm.com), Docker

3 Compilaciones Docker, (enlace externo a ibm.com), Docker

4 Top 5 containerization technologies in 2024, (enlace externo a ibm.com), 6sense

5 A Brief History of Containers: From the 1970s Till Now, (enlace externo a ibm.com) Aqua, 10 de enero de 2020

6 Docker Hub, (enlace externo a ibm.com), Docker

7 Descripción general de Docker Hub, (enlace externo a ibm.com), Docker

GitHub, (enlace externo a ibm.com)

9 Cloud Native Computing Foundation(enlace externo a ibm.com)

10 Open Container Initiative, (enlace externo a ibm.com)

11 Global Usage of Microservices in Organizations 2021, by Organization Size, (enlac externo a ibm.com), Statista, 2023

12 Docker announces Docker AI Boosting Developer Productivity Through Context-Specific, Automated Guidance, (enlace externo a ibm.com), Docker, 2023