Docker

menu icon

Docker

Docker es una plataforma de código abierto para crear, desplegar y gestionar aplicaciones en contenedores. Conozca los contenedores, en qué se diferencian de las máquinas virtuales y por qué Docker está tan ampliamente adoptado y utilizado.

¿Qué es Docker?

Docker es una plataforma de contenerización de código abierto. Permite a los desarrolladores empaquetar aplicaciones en contenedores: componentes ejecutables estandarizados que combinan el código fuente de la aplicación con las bibliotecas del sistema operativo (SO) y las dependencias necesarias para ejecutar dicho código en cualquier entorno. Los contenedores simplifican la entrega de aplicaciones distribuidas y son cada vez más populares a medida que las organizaciones cambian a entornos de desarrollo nativo en cloud, híbridos y multicloud.

Los desarrolladores pueden crear contenedores sin Docker, pero la plataforma permite crear, desplegar y gestionar contenedores de forma más fácil, sencilla y segura. Docker es básicamente un kit de herramientas que permite a los desarrolladores crear, desplegar, ejecutar, actualizar y detener contenedores utilizando mandatos simples y una automatización para ahorrar trabajo utilizando una única API.

Docker también hace referencia a Docker, Inc. (enlace externo a IBM), la empresa que vende la versión comercial de Docker, y al proyecto de código abierto Docker (enlace externo a IBM), donde colaboran 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 prestaciones, como por ejemplo los grupos de control (Cgroups) para asignar recursos entre procesos, y los espacios de nombres para restringir el acceso de procesos o la visibilidad a otros recursos o áreas del sistema, permiten a varios componentes de aplicación compartir los recursos de una sola instancia del sistema operativo de host de la misma forma que un hipervisor permite a varias máquinas virtuales (VM) compartir la CPU, la memoria y otros recursos de un único servidor de hardware.

Como resultado, la tecnología de contenedor ofrece todas las funciones y ventajas de las máquinas virtuales, por ejemplo, el aislamiento de aplicaciones, la escalabilidad rentable y la capacidad de descartar, además de otras ventajas importantes:

  • Peso 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 eficiencia de recursos: con los contenedores, puede 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.
  • Mayor productividad de los desarrolladores: 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 interconexiones 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.

Las empresas que utilizan contenedores destacan otros beneficios, 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 hoy día 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 ha mejorado las prestaciones de contenerización nativas de Linux con tecnologías que permiten:

  • 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. Con los contenedores Docker, solo se puede ejecutar un proceso en cada contenedor. Esto permite crear una aplicación que puede continuar ejecutándose mientras una de sus partes se desactiva para una 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 con aportaciones de los usuarios.

Hoy en día, la containerización de Docker también funciona con el servidor Microsoft Windows. Y la mayoría de los proveedores de cloud ofrecen servicios específicos para ayudar a los desarrolladores a crear, enviar y ejecutar aplicaciones contenerizadas con Docker.

Por este motivo, la adopción de Docker se multiplicó rápidamente y continúa aumentando. En este artículo, Docker Inc. menciona 11 millones de desarrolladores y 13 000 millones de descargas de imágenes de contenedores al mes (enlace externo a IBM).

Herramientas y términos de Docker

Estas son algunas de las herramientas y la terminología que encontrará 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.

Imágenes Docker

Las imágenes 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 Docker a partir de una imagen base y, como resultado, compartirán los puntos en común de su pila.

Las imágenes 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 Docker. Aunque las imágenes 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) es el repositorio público de imágenes Docker que se autodenomina la "biblioteca más grande del mundo y una comunidad 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 muchas otras 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.

Daemon Docker

El daemon Docker es un servicio que se ejecuta en el sistema operativo, por ejemplo, Microsoft Windows, Apple MacOS o iOS. Este servicio crea y gestiona las imágenes Docker utilizando los mandatos del cliente, y actúa como centro de control de la implementación de Docker.

Registro Docker

Un registro Docker es un sistema de almacenamiento y distribución de código abierto escalable para imágenes 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 está ejecutando unos pocos contenedores, es bastante sencillo gestionar su aplicación dentro de Docker Engine, el tiempo de ejecución de facto del sector. No obstante, si su despliegue está formado por miles de contenedores y cientos de servicios, es casi imposible gestionar ese flujo de trabajo sin ayuda de estas herramientas creadas específicamente.

Docker Compose

¿Qué es Docker?Docker Compose crea un archivo YAML que especifica qué servicios se incluyen en la aplicación, y puede desplegar y ejecutar contenedores con un único mandato. Mediante Docker Compose, también puede definir volúmenes persistentes para el almacenamiento, especificar nodos base y documentar y configurar dependencias de servicio.

Kubernetes

Para supervisar y gestionar ciclos de vida de contenedor en entornos más complejos, deberá recurrir a una herramienta de orquestación de contenedor. Aunque Docker incluye su propia herramienta de orquestación (denominada Docker Swarm), la mayoría de 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 del estado, etc. Además, el ecosistema de código abierto de herramientas de Kubernetes, incluidas 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.

Para profundizar en Kubernetes, vea el vídeo "Descripción de Kubernetes":

Descripción de Kubernetes (10:59)

Docker e IBM Cloud

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.

Dé el siguiente paso:

  • 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 actualizaciones, el escalado y el suministro.
  • Despliegue y ejecute aplicaciones en entornos locales, de edge computing y de cloud público de cualquier proveedor con IBM Cloud Satellite, una solución de cloud distribuida gestionada.
  • Simplifique y consolide sus lagos de datos desplegando de forma transparente el almacenamiento empresarial habilitado para contenedores en entornos locales y de cloud público con soluciones de almacenamiento cloud híbrido de IBM.
  • Simplifique la compleja gestión del entorno de TI híbrido con servicios gestionados por IBM Cloud.

Empiece hoy mismo con una cuenta de IBM Cloud.