Inicio topics ¿Qué es Docker? ¿Qué es Docker?
Cree en Docker dentro de OpenShift Suscríbase para recibir actualizaciones de la nube
Ilustración con collage de pictogramas de monitor de computadora, servidor, nubes, puntos

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

¿Qué es Docker?

Docker es una plataforma de código abierto que permite a los desarrolladores crear, desplegar, ejecutar, actualizar y administrar 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.

Vale la pena señalar que cuando la gente habla de Docker, generalmente se refiere a Docker Engine, el tiempo de ejecución para construir y ejecutar contenedores. Docker también se refiere a Docker, Inc.1, la compañía que vende la versión comercial de Docker. También se relaciona con el proyecto de código abierto Docker2, al que Docker, Inc. y muchas otras organizaciones e individuos contribuyen.

Los contenedores simplifican el desarrollo y la entrega de aplicaciones distribuidas. Se han vuelto cada vez más populares a medida que las organizaciones cambian a entornos de desarrollo nativo de la nube y multinube híbrida. Los desarrolladores pueden crear contenedores sin Docker trabajando directamente con capacidades integradas en Linux y otros sistemas operativos, pero Docker hace que la contenerizaciónsea más rápida y sencilla. Al momento de escribir este artículo, Docker informó que más de 20 millones de desarrolladores usan la plataforma al mes3. Al igual que otras tecnologías de contenerización, como 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 única aplicación a partir de muchos componentes o servicios más pequeños, poco acoplados y desplegables de forma independiente. Cada servicio se puede contenerizar con Docker, lo que simplifica el despliegue y permite a los equipos implementar nuevas versiones y escalar aplicaciones según sea necesario. 

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

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

Contenido relacionado

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

¿Cómo funcionan los contenedores?

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

Los contenedores permiten que varios componentes de la aplicación compartan los recursos de una única instancia del sistema operativo anfitrión. Este uso compartido es similar a la forma en que un hipervisor permite que varias máquinas virtuales (VM) compartan la unidad central de procesamiento (CPU) de un único servidor de hardware, la memoria y otros recursos. 

La tecnología de contenedores ofrece todas las funciones y beneficios de las Virtual Machines (VM), incluido el aislamiento de aplicaciones y la escalabilidad rentable, además de otros beneficios significativos:

  • Peso más ligero: a diferencia de las máquinas virtuales, los contenedores no llevan la carga útil de una instancia de sistema operativo completa y un hipervisor. Incluyen sólo los procesos del sistema operativo y las dependencias necesarias para ejecutar el código. Los tamaños de los contenedores se miden en megabytes (en lugar de gigabytes para algunas VM), hacen un mejor uso de la capacidad del hardware y tienen tiempos de inicio 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 VM son más rápidos y fáciles de desplegar, aprovisionar y reiniciar. 

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

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

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

Docker es la herramienta de contenerización más usada, con una cuota de mercado del 82.84 %.4 Docker es tan popular hoy en día que "Docker" y "contenedores" se emplean 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 kernel de Linux, permitiendo completamente la virtualización para una sola instancia de Linux. Si bien LXC todavía se usa hoy en día, hay disponibles tecnologías de kernel de Linux más nuevas. Ubuntu, un sistema operativo Linux moderno y de código abierto, también ofrece esta capacidad. Docker permite a los desarrolladores acceder a estas capacidades nativas de contenerización mediante comandos simples y automatizarlas a través de una interfaz de programación de aplicaciones (API) que ahorra trabajo.  

Beneficios de Docker frente a LXC

Emplear Docker tiene muchos beneficios respecto al antiguo y menos compatible LXC.

Portabilidad de contenedores mejorada y fluida

Si bien los contenedores LXC a menudo hacen 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 detalladas

Con Docker, los desarrolladores pueden combinar varios procesos en un solo contenedor. Esta flexibilidad permite crear una aplicación que puede seguir ejecutándose mientras una de sus partes se desactiva para una actualización o reparación. 

Creación automatizada de contenedores

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

Control de versiones de contenedores

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

Reutilización de un contenedor

Los desarrolladores pueden acceder a un registro de código abierto que contiene miles de contenedores que aportan los usuarios. 

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. Los principales proveedores de servicios en la nube (CSP), incluidos Amazon Sitio 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 emplea una arquitectura de cliente/servidor. El siguiente es un desglose de los componentes principales asociados con Docker, junto con otros términos y herramientas de Docker.

Servidor Docker: Un servidor Docker es una máquina física o virtual que ejecuta Linux (u otro SO compatible con Docker-Engine).

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

Servicio Docker: El servicio Docker es el que crea y administra imágenes de Docker, mediante el uso de los comandos del cliente. Esencialmente, el servicio Docker sirve como el centro de control para la implementación de Docker.

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

Objetos de Docker: Los objetos de Docker son componentes de un despliegue 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 de Docker son las instancias en tiempo real y en ejecución de las imágenes de Docker. Si bien las imágenes Docker son archivos de solo lectura, los contenedores son contenido ejecutable, efímero y en vivo. Los usuarios pueden interactuar con ellos y los administradores pueden ajustar su configuración y condiciones mediante los comandos de Docker. 

Imágenes de Docker: Las imágenes de Docker contienen 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 ejecutar como contenedor. Cuando un desarrollador ejecuta la imagen de Docker, se convierte en una instancia (o varias instancias) del contenedor. 

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

Las imágenes de Docker se componen de 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 y esta capa superior reemplaza a la capa superior anterior como la versión actual de la imagen. Las capas anteriores se guardan para retrocesos o para reutilizarlas en otros proyectos. 

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

Este proceso iterativo de creación de imágenes aumenta la eficiencia general, ya que varias instancias de contenedores activos pueden ejecutar a partir de una única imagen base. Cuando lo hacen, emplean una pila común. 

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

Dockerfile: Cada contenedor acoplador comienza con un archivo de texto simple que contiene instrucciones para crear la imagen del contenedor Docker. Dockerfile automatiza el proceso de creación de imágenes Docker. Es esencialmente una lista de instrucciones de la CLI que Docker Engine ejecutará para ensamblar la imagen. La lista de comandos Docker es amplia pero estandarizada: las operaciones Docker funcionan igual independientemente de los contenidos, infraestructura u otras variables del entorno. 

Documentación de Docker: la 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: Docker Hub6 es el repositorio público de imágenes de Docker, y se autodenomina la biblioteca y comunidad de imágenes de contenedores más grande del mundo7. 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 al 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 Docker como punto de partida para cualquier proyecto de contenerización. 

Existen otros repositorios de imágenes, comoGitHub8. 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 (repo) que puede contener muchas imágenes. El repositorio puede ser público o privado y vinculado a cuentas de GitHub o BitBucket. 

Docker Desktop: 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 Docker: un registro Docker es un sistema de almacenamiento y distribución escalable y de código abierto para imágenes Docker. Permite a los desarrolladores rastrear las versiones de imágenes en repositorios mediante el uso de etiquetas para su identificación. Este seguimiento e identificación se logra mediante Git, una herramienta de control de versiones. 

Complementos de Docker: losdesarrolladores emplean 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: Las extensiones de Docker permiten a los desarrolladores emplear 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 gestionar aplicaciones multicontenedor, donde los contenedores se ejecutan en el mismo host de Docker. Docker Compose crea un archivo YAML (.YML) que especifica los servicios que se incluyen en la aplicación, y puede desplegar y ejecutar contenedores con un solo comando. Debido a que la sintaxis YAML es independiente del lenguaje, los archivos YAML se pueden usar en programas escritos en Java, Python, Ruby y muchos otros lenguajes. 

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

Orquestación de contenedores y Kubernetes

Cuando se ejecutan solo unos pocos contenedores, gestionar una aplicación dentro de Docker Engine (el tiempo de ejecución de facto de la industria) es bastante simple. Sin embargo, para despliegues que comprenden miles de contenedores y cientos de servicios, es casi imposible monitorear y gestionar 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 de la industria. 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 un proyecto desarrollado para uso interno en Google. Presentado al público en 2014, Kubernetes programa y automatiza tareas integrales para la gestión de arquitecturas basadas en contenedores, incluido el despliegue de contenedores, las actualizaciones, la detección de servicios, el aprovisionamiento de almacenamiento, el equilibrio de carga, la supervisión del estado y mucho 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, que incluye ISTIO, Knative y Tekton, permite a las organizaciones desplegar una plataforma como servicio (PaaS ) de alta productividad para la aplicación en contenedores. Este ecosistema también proporciona una rampa de acceso más rápido a la computación sin servidor.

Estándares de la industria de Docker y contenedores

Fundada en 2015 después de que Docker donara la especificación de imagen del contenedor y el código de tiempo de ejecución runc, 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 de imagen del contenedor y el tiempo de ejecución. El OCI está formado por empresas líderes, incluyendo Docker, IBM y Red Hat®. Apoya la innovación mientras ayuda a las organizaciones a evitar el bloqueo de los proveedores. 

Si bien Docker es la tecnología de contenedores más conocida y empleada, el ecosistema más amplio se estandarizó en contenedores y otras alternativas, incluidas LXC, CRI-O, Podman y otras. En 2017, Docker donó el proyecto containerd al CNCF. Containerd es un tiempo de ejecución de contenedores estándar de la industria que emplea runc y es el tiempo de ejecución de contenedores central de Docker Engine.

Seguridad de Docker

La complejidad que rodea a las cargas de trabajo en contenedores requiere implementar y mantener controles de seguridad que protejan los contenedores y su infraestructura subyacente. Las prácticas de seguridad de contenedores Docker están diseñadas para proteger las aplicaciones en contenedores contra riesgos como violaciones de seguridad, malware y actores maliciosos. 

Dado que los contenedores Docker están aislados entre sí y del sistema host, tienen un nivel inherente de seguridad por diseño. No obstante, este aislamiento no es absoluto. La seguridad de Docker gira alrededor de un entorno integral de confianza cero 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 contenedores ha aumentado la popularidad de DevSecOps. Este es un enfoque de seguridad que automatiza la integración de las prácticas de seguridad en cada fase del ciclo de vida del desarrollo de software, que abarca el diseño inicial a través de la integración, las pruebas, la entrega y el despliegue. Además, las mejores prácticas de seguridad de Docker incluyen herramientas y soluciones de seguridad de contenedores de terceros, incluyendo escaneo y monitoreo, que pueden detectar problemas de seguridad antes de que afecten 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 on premises 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 emplean microservicios para el desarrollo de sus aplicaciones11. Docker simplifica el despliegue de aplicaciones, ya que cada microservicio puede incluir contenedores, escalarse y gestionar de forma independiente, eliminando así la necesidad de que los desarrolladores configuren y gestionen entornos particulares. 

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

Docker es ideal para las canalizaciones de integración continua y entrega continua (CI/CD), ya que proporciona un entorno coherente para probar y desplegar aplicaciones, reduciendo los posibles errores durante el despliegue.

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. 

Despliegue de multinube híbrida

Una tecnología liviana en contenedores como Docker facilita el traslado de aplicaciones a través de diferentes entornos. Los principales proveedores de servicios en la nube ofrecen servicios de desarrollo y administración relacionados con Docker que admiten la ejecución de Docker en entornos de nube híbrida, que unifican las configuraciones locales, nube pública, nube privada y edge. Docker se puede implementar fácilmente en toda la infraestructura de TI multinube, que se refiere a los servicios en la nube de más de un proveedor de nube.

Contenedores como servicio (CaaS)

Contenedores como servicio (CaaS) permite a los desarrolladores gestionar y desplegar aplicaciones en contenedores, lo que facilita la ejecución de contenedores 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/aprendizaje automático (IA/ML)

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

Soluciones relacionadas
Red Hat OpenShift on IBM Cloud

Explore cómo Red Hat OpenShift on IBM Cloud aprovecha Red Hat OpenShift en entornos públicos e híbridos para lograr velocidad, capacidad de respuesta del mercado, escalabilidad y confiabilidad.

Explore Red Hat OpenShift en IBM Cloud
IBM Cloud Satellite 

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

Explore IBM Cloud Satellite
Soluciones de nube híbrida

Progrese en su recorrido hacia la nube y la IA. Comience por evaluar las inversiones en TI y diseñar una base abierta e integrada a la que se pueda acceder de forma rápida y uniforme en todos los entornos digitales.

Conozca las soluciones de la nube híbrida
IBM Cloud Container Registry

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

Explorar 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 de Kubernetes. Descargue tareas tediosas y repetitivas que impliquen gestión de seguridad, gestión de cumplimiento, gestión de implementación y gestión continua del ciclo de vida. 

Explore Red Hat OpenShift en IBM Cloud Empiece sin costo
Notas de pie de página

Acerca de Docker (el enlace se encuentra fuera de ibm.com), Docker

Proyectos de código abierto, (el enlace se encuentra fuera de ibm.com), Docker

3 Docker Builds(el enlace se encuentra fuera de ibm.com), Docker

4 Las 5 principales tecnologías de contenerización en 2024(el enlace se encuentra fuera de ibm.com), 6sense

5 Breve historia del contenedor: Desde los años 70 hasta ahora(el enlace se encuentra fuera de ibm.com) Aqua, 10 de enero de 2020

6 Docker Hub(el enlace se encuentra fuera de ibm.com), Docker

7 Descripción general de Docker Hub(el enlace se encuentra fuera de ibm.com), Docker

GitHub(el enlace se encuentra fuera de ibm.com)

9 Cloud Native Computing Foundation, (el enlace se encuentra fuera de ibm.com)

10 Iniciativa de contenedor abierto, (el enlace se encuentra fuera de ibm.com)

11 Uso global de microservicios en organizaciones 2021, por tamaño de organización, (el enlace se encuentra fuera de ibm.com), Statista, 2023

12 Docker anuncia Docker IA Boosting Developer Productivity Through Context-Specific, Automated Guidance, (el enlace se encuentra fuera de ibm.com), Docker, 2023