¿Qué es Docker?

Vista aérea de Canberra, Australia

Autores

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

¿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 opera.

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 las capacidades integradas en Linux® y otros sistemas operativos, pero Docker hace que la contenedorización sea más rápida y sencilla. Al momento de escribir este artículo, Docker informó que más de 20 millones de desarrolladores emplean la plataformamensualmente3. Al igual que otras tecnologías de contenedorizació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 ú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.

Vista aérea de una autopista

Mantenga su cabeza en la nube


Reciba el boletín semanal Think para obtener orientación de expertos sobre cómo optimizar la configuración multinube en la era de la IA.

¿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), la memoria y otros recursos de un único servidor de hardware.

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 máquinas virtuales), 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, los contenedores 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.

Academia de IA

Cómo lograr la preparación para la IA con la nube híbrida

Dirigida por los principales líderes de opinión de IBM, el plan de estudios está diseñado para ayudar a los líderes empresariales a obtener los conocimientos necesarios para priorizar las inversiones en IA que pueden impulsar el crecimiento.

¿Por qué usar 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 fuera publicado 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).

Docker frente vs. LXC

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

  • Portabilidad de contenedores mejorada y fluida
  • Actualizaciones aún más ligeras y detalladas
  • Creación automatizada de contenedores
  • Control de versiones de contenedores
  • Reutilización de un contenedor

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
  • Docker Engine
  • Servicio Docker
  • Cliente Docker
  • Objetos de Docker
  • Contenedores Docker
  • Imágenes de Docker
  • Construcción de Docker
  • Dockerfile
  • Documentación de Docker
  • Docker Hub
  • Escritorio Docker
  • Registro de Docker
  • Complementos de Docker
  • Extensiones Docker
  • Docker Compose

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 utilizando 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.

Escritorio Docker


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

Registro de Docker


Un registro de Docker es un sistema de distribución y almacenamiento 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


Los desarrolladores utilizan complementos para hacer que Docker Engine sea aún más funcional. Se incluyen varios complementos de Docker que admiten autorización, volumen y red en el sistema de complementos de Docker Engine; 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 la 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 vendor lock-in (dependencia de 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 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 on-premises, en la nube pública, nube privada y edge. Docker se puede desplegar 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 el 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
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud es una plataforma de contenedores OpenShift (OCP) totalmente gestionada.

Conozca Red Hat OpenShift
Soluciones de contenedores

Las soluciones de contenedores ejecutan y amplían cargas de trabajo en contenedores con seguridad, innovación de código abierto y despliegue rápido.

Explorar contenedores
Servicios de consultoría en la nube 

Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de IBM de asesoramiento sobre la nube. Descubra cómo crear conjuntamente soluciones, acelerar la transformación digital y optimizar el rendimiento a través de estrategias de nube híbrida y asociaciones de expertos.

Servicios en la nube
Dé el siguiente paso

Modernice su infraestructura con las soluciones de contenedores de IBM. Ejecute, escale y gestione cargas de trabajo en contenedores en todos los entornos con flexibilidad, seguridad y eficiencia mediante el uso de la plataforma integral de contenedores de IBM.

Explore las soluciones de contenedores Cree su cuenta gratuita de IBM Cloud