¿Qué es Docker?
Docker es una plataforma de código abierto para crear, desplegar y gestionar aplicaciones en contenedores
Suscríbase al boletín de IBM
Fondo negro y azul
¿Qué es Docker?

Docker es una plataforma de código abierto que permite a los desarrolladores crear, desplegar, ejecutar y gestionar contenedores, que son componentes estandarizados y ejecutables que combinan el código fuente de aplicación con las dependencias y las bibliotecas del sistema operativo (SO) necesarias para ejecutar dicho código en cualquier entorno.

Los contenedores simplifican el desarrollo y la entrega de las aplicaciones distribuidas y han ido ganando popularidad con la transición de las organizaciones hacia entornos multicloud híbridos y de desarrollo nativos en cloud. Los desarrolladores pueden crear contenedores sin Docker trabajando directamente con las funciones integradas en Linux y otros sistemas operativos, pero la contenerización que realiza Docker es más rápida, fácil y segura. Al momento de redactar este artículo, Docker señala que la plataforma cuenta con más de 13 millones de usuarios desarrolladores (enlace externo a ibm.com).

Docker también se refiere a Docker, Inc. (enlace externo a ibm.com), la compañía que comercializa la versión comercial de Docker, y al proyecto Docker de código abierto en el que participan Docker, Inc. y muchas otras organizaciones y personas.

Cómo funcionan los contenedores y por qué son tan populares

Los contenedores son posibles gracias al aislamiento de procesos y a las funciones de virtualización integradas en el kernel de Linux. Estas funciones —tales como grupos de control (Cgroups) para asignar recursos entre procesos, y espacios de nombres para restringir el acceso o la visibilidad de un proceso a otros recursos o áreas del sistema— permiten compartir los recursos de una única instancia del sistema operativo de host entre varios componentes de aplicación de la misma manera en que un hipervisor permite compartir la CPU, la memoria y otros recursos de un único servidor de hardware entre varias máquinas virtuales (VM).  

En consecuencia, la tecnología de contenedor ofrece toda la funcionalidad y las ventajas de las máquinas virtuales, incluido el aislamiento de aplicaciones, una escalabilidad rentable y una gran disponibilidad, además de otras ventajas importantes:

  • Peso más ligero: a diferencia de las máquinas virtuales, los contenedores no soportan la carga útil de una instancia de SO completa y un hipervisor, solo incluyen los procesos y dependencias de SO necesarios para ejecutar el código. Los tamaños de los contenedores se miden en megabytes (frente a los gigabytes de algunas máquinas virtuales), hacen un mejor uso de la capacidad de hardware y tienen tiempos de arranque más rápidos. 

  • Mayor productividad de los desarrolladores: las aplicaciones en contenedores se pueden escribir una vez y ejecutarse en cualquier lugar y, en comparación con las VM, los contenedores son más rápidos y fáciles de desplegar, suministrar y reiniciar. Por lo tanto, son ideales para su uso en conductos de integración continua y entrega continua (CI/CD) y la opción perfecta para los equipos de desarrollo que adoptan las prácticas Agile y DevOps

  • Mayor eficiencia de recursos: con los contenedores, los desarrolladores pueden ejecutar varias veces las mismas copias de una aplicación en el mismo hardware que utilizando las máquinas virtuales. Esto puede reducir el gasto de cloud.

Las empresas que utilizan contenedores destacan otros beneficios como, por ejemplo, una mejor calidad de la aplicación o una respuesta más rápida a los cambios del mercado, entre otros. Obtenga más información con esta herramienta interactiva: 

Descargue el informe completo: Contenedores en la empresa (PDF, 1,4 MB)
¿Por qué debe utilizar Docker?

Docker es tan popular actualmente que "Docker" y "contenedores" se utilizan indistintamente. Sin embargo, las primeras tecnologías relacionadas con los contenedores estuvieron disponibles durante años, incluso décadas (enlace externo a IBM), antes de que Docker se lanzara al público en 2013. 

Sobre todo, en 2008, se implementó LinuXContainers (LXC) en el kernel de Linux, lo que permitió la virtualización completa de una instancia de Linux. Aunque LXC todavía se utiliza hoy día, hay disponibles nuevas tecnologías que utilizan el kernel de Linux. Ubuntu, un sistema operativo Linux moderno y de código abierto, también ofrece esta capacidad. 

Docker permite a los desarrolladores acceder a estas prestaciones nativas de contenerización mediante mandatos sencillos y automatizarlas a través de una interfaz de programación de aplicaciones (API) que ahorra trabajo. En comparación con LXC, Docker ofrece:

  • Portabilidad mejorada y sin interrupciones: mientras que los contenedores LXC suelen hacer referencia a configuraciones específicas de la máquina, los contenedores Docker se ejecutan sin modificaciones en cualquier entorno de escritorio, centro de datos y cloud. 
  • Un peso todavía más ligero y actualizaciones más granulares: con LXC, se pueden combinar varios procesos en un único contenedor. Esto permite crear una aplicación que puede continuar ejecutándose mientras una de sus partes se desactiva para realizar una actualización o reparación. 

     

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

     

  • Mantenimiento de versiones de contenedor: Docker puede realizar un seguimiento de las versiones de una imagen de contenedor, retrotraerse a versiones anteriores y rastrear quién ha creado una versión y cómo. Puede incluso cargar solo los deltas entre una versión existente y otra nueva. 

     

  • Reutilización de contenedores: los contenedores existentes se pueden utilizar como imágenes base, básicamente como plantillas para crear nuevos contenedores. 

     

  • Bibliotecas de contenedores compartidos: los desarrolladores pueden acceder a un registro de código abierto que contiene miles de contenedores aportados por los usuarios. 

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

Herramientas y términos de Docker

Estas son algunas de las herramientas, términos y tecnologías que los desarrolladores encuentran al utilizar Docker: 

DockerFile

Cada contenedor Docker empieza 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 de Docker. Básicamente, es una lista de instrucciones de interfaz de línea de mandatos (CLI) que Docker Engine ejecutará para ensamblar la imagen. La lista de mandatos de Docker es enorme, pero estandarizada: las operaciones de Docker funcionan del mismo modo sea cual sea el contenido, la infraestructura u otras variables del entorno. 

Imágenes de Docker

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

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

Las imágenes de Docker se componen de capas, y cada capa corresponde a una versión de la imagen. Cuando un desarrollador realiza cambios en la imagen, se crea una nueva capa superior; esta capa superior sustituye a la capa superior anterior como la versión actual de la imagen. Las capas anteriores se guardan para las retrotracciones o para reutilizarse en otros proyectos. 

Cada vez que se crea un contenedor a partir de una imagen de Docker, se crea una nueva capa denominada la capa de contenedor. Los cambios realizados en el contenedor, por ejemplo, la adición o supresión de archivos, solo se guardan en la capa de contenedor y solo existen mientras se ejecuta el contenedor. Este proceso iterativo de creación de imágenes permite aumentar la eficiencia general, ya que pueden ejecutarse varias instancias de contenedores activas desde una única imagen base y, cuando lo hacen, aprovechan una pila común. 

Contenedores Docker

Los contenedores Docker son las instancias activas en ejecución de las imágenes de Docker. Aunque las imágenes de Docker son archivos de solo lectura, los contenedores son contenido activo, efímero y ejecutable. Los usuarios pueden interactuar con ellos y los administradores pueden ajustar sus valores y condiciones utilizando mandatos Docker. 

Docker Hub

Docker Hub (enlace externo a ibm.com) es el repositorio público de imágenes de Docker que se autodenomina "la comunidad y la biblioteca más grandes del mundo de imágenes de contenedor". Contiene más de 100 000 imágenes de contenedor procedentes de proveedores de software comerciales, proyectos de código abierto y desarrolladores individuales. Incluye imágenes generadas por Docker, Inc., imágenes certificadas pertenecientes a Docker Trusted Registry y muchos otros miles de imágenes. 

Todos los usuarios de Docker Hub pueden compartir sus imágenes a su voluntad. También pueden descargar imágenes base predefinidas del sistema de archivos Docker para utilizarlas como punto de partida para cualquier proyecto contenerizado. 

Existen, además, otros repositorios de imágenes, entre los que destaca GitHub. GitHub es un servicio de alojamiento de repositorio famoso 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 se puede vincular a cuentas de GitHub o BitBucket. 

Docker Desktop

Docker Desktop (enlace externo a ibm.com) es una aplicación para Mac o Windows que incluye Docker Engine, el cliente de CLI de Docker, Docker Compose, Kubernetes, etc. También incluye acceso a Docker Hub. 

Daemon Docker

El daemon Docker es un servicio que crea y gestiona imágenes de Docker mediante los mandatos del cliente. Básicamente, el daemon Docker actúa como centro de control de la implementación de Docker. El servidor en el que se ejecuta el daemon Docker se llama host de Docker.

Registro de Docker

Un registro de Docker es un sistema de almacenamiento y distribución de código abierto escalable para imágenes de Docker. El registro permite realizar un seguimiento de las versiones de las imágenes en los repositorios, utilizando el etiquetado para la identificación. Para ello, se utiliza una herramienta de control de versiones Git. 

Despliegue y orquestación de Docker

Si solo se ejecutan unos pocos contenedores, es bastante sencillo gestionar una aplicación dentro de Docker Engine, el tiempo de ejecución de facto del sector. No obstante, si los despliegues están formados por miles de contenedores y cientos de servicios, es casi imposible gestionar ese flujo de trabajo sin ayuda de estas herramientas creadas específicamente.

Plugins de Docker

Los plugins de Docker (enlace externo a ibm.com) se pueden utilizar para aumentar la funcionalidad de Docker aún más.El sistema de plugins Docker Engine incluye varios plugins de Docker, y también se pueden cargar plugins de terceros. 

Docker Compose

Los desarrolladores pueden utilizar Docker Compose para gestionar aplicaciones multicontenedor, en las que 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 desplegar y ejecutar contenedores con un único mandato. 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 utilizar Docker Compose para definir volúmenes persistentes para el almacenamiento, especificar nodos base y documentar y configurar dependencias de servicio. 

Kubernetes

Para supervisar y gestionar los ciclos de vida de contenedor de los entornos más complejos, hace falta una herramienta de orquestación de contenedores. Aunque Docker incluye su propia herramienta de orquestación (denominada Docker Swarm), la mayoría de los desarrolladores prefieren Kubernetes. 

Kubernetes es una plataforma de orquestación de contenedores de código abierto que procede de un proyecto desarrollado para su uso interno en Google. Kubernetes planifica y automatiza tareas que forman parte integral de la gestión de arquitecturas basadas en contenedores, incluidos el despliegue de contenedores, las actualizaciones, el descubrimiento de servicios, el suministro de almacenamiento, el equilibrio de carga, la supervisión de estado, etc. Además, el ecosistema de código abierto de herramientas de Kubernetes, que incluye Istio y Knative, permite a las organizaciones desplegar una plataforma como servicio (PaaS) de alta productividad para aplicaciones contenerizadas y un acceso más rápido a la informática sin servidor.

Más información sobre Kubernetes

Soluciones relacionadas
Red Hat® OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud aprovecha OpenShift en entornos públicos e híbridos para incrementar la velocidad, la capacidad de respuesta del mercado, la escalabilidad y la fiabilidad.

Explore Red Hat OpenShift on IBM Cloud
IBM® Cloud Satellite

Con IBM® Cloud Satellite, puede lanzar servicios de cloud coherentes en cualquier lugar: en local, en el borde y en entornos de cloud público.

Explore IBM® Cloud Satellite
Soluciones de almacenamiento en cloud híbrido

Almacene los datos en el lugar más conveniente para las aplicaciones y servicios con las soluciones de almacenamiento en cloud híbrido de IBM en local, cloud privado y cloud público.

Explore las soluciones de almacenamiento en cloud híbrido
Servicios cloud ​

Descubra cómo un enfoque de servicios gestionados de cloud ayuda a mitigar la posible tensión entre la gestión de TI tradicional y la cultura de DevOps.

Explore los servicios de cloud
Recursos Contenedores en la empresa

Una nueva investigación de IBM documenta la creciente adopción de contenedores y Kubernetes.

Ofrecer modelos en Kubernetes u OpenShift mediante contenedores autónomos

Cree una imagen de contenedor autónomo para ofrecer modelos NLP de Watson y luego ejecútela en un clúster de Kubernetes o Red Hat OpenShift.

Dé el siguiente paso

Una plataforma de contenedor empresarial proporciona orquestación a través de múltiples clouds públicos y privados, para unificar sus entornos para mejorar el rendimiento empresarial y el rendimiento operativo. Es un componente clave de una estrategia abierta de cloud híbrido que permite evitar la dependencia de un solo proveedor, crear y ejecutar cargas de trabajo en cualquier lugar con coherencia, y optimizar y modernizar todo el entorno de TI. Despliegue clústeres de Kubernetes altamente disponibles y totalmente gestionados con Red Hat OpenShift on IBM Cloud, un servicio de OpenShift gestionado que aprovecha la escala empresarial y la seguridad de IBM Cloud para automatizar las actualizaciones, el escalado y el suministro.

Explore Red Hat® OpenShift on IBM Cloud