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

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

Los contenedores simplifican el desarrollo y la entrega de aplicaciones distribuidas y han ido ganando popularidad con la transición de las organizaciones hacia entornos híbridos multinube y de desarrollo nativo en la nube.  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, más fácil y más segura. Pero Docker hace que la contenerización sea más rápida, fácil y segura. En el momento de escribir este artículo, Docker informó que más de 13 millones de desarrolladores utilizan la plataforma (enlace externo a ibm.com).

Docker también hace referencia a Docker, Inc. (enlace externo a ibm.com), la empresa que vende la versión comercial de Docker, y al proyecto de código abierto de Docker al que contribuyen Docker, Inc y muchas otras organizaciones y personas.

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

Los contenedores son posibles gracias a las funcionalidades de virtualización y aislamiento de procesos integradas en el kernel de Linux. Estas funcionalidades, 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 que varios componentes de la aplicación compartan los recursos de una sola instancia del sistema operativo host de la misma manera que un hipervisor permite que varias máquinas virtuales (VM) compartan la CPU, la memoria y otros recursos de un único servidor de hardware. 

Como resultado, la tecnología de contenedores ofrece toda la funcionalidad y los beneficios de las máquinas virtuales, incluido el aislamiento de aplicaciones, la escalabilidad rentable y la disponibilidad, además de importantes ventajas adicionales:

  • 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 gigabytes para algunas VM), hacen un mejor uso de la capacidad del hardware y tienen tiempos de inicio más rápidos. 

  • Productividad mejorada del desarrollador: las aplicaciones en contenedores se pueden escribir una vez y ejecutar en cualquier lugar. Y en comparación con las máquinas virtuales, los contenedores son más rápidos y fáciles de implementar, suministrar y reiniciar. Por lo tanto, son ideales para su uso en líneas de trabajo 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 más copias de una aplicación en el mismo hardware que con las máquinas virtuales. Esto puede reducir el gasto en la nube.

Las empresas que utilizan contenedores informan de otros beneficios, que incluyen una mejor calidad de la aplicación y una respuesta más rápida a los cambios del mercado y mucho más. Descubra más con esta herramienta interactiva: 

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

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

En particular, en 2008, LinuXContainers (LXC) se implementó en el kernel de Linux, lo que permitió la virtualización completa para una sola instancia de Linux. Si bien LXC todavía se usa hoy en día, hay disponibles tecnologías más nuevas que usan el kernel de Linux. Ubuntu, un moderno sistema operativo Linux de código abierto, también proporciona esta funcionalidad. 

Docker permite a los desarrolladores acceder a estas funcionalidades nativas de contenerización mediante comandos simples 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 de contenedores mejorada y sin interrupciones: mientras que los contenedores LXC a menudo hacen referencia a configuraciones específicas de la máquina, los contenedores Docker se ejecutan sin modificaciones en cualquier desktop, centro de datos y entorno de nube. 
  • Actualizaciones aún más ligeras y más granulares: con LXC, se pueden combinar múltiples procesos dentro de un solo contenedor. Esto hace posible crear una aplicación que pueda continuar ejecutándose mientras una de sus partes se retira 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 del contenedor: Docker puede rastrear versiones de una imagen del contenedor, retroceder a versiones anteriores y rastrear quién creó una versión y cómo. Incluso puede cargar solo los deltas entre una versión existente y una nueva. 

     

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

     

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

En la actualidad, la creación de contenedores 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 nube, incluidos Amazon Web Services (AWS), Microsoft Azure e IBM Cloud, ofrecen servicios específicos para ayudar a los desarrolladores a crear, implementar y ejecutar aplicaciones en contenedores con Docker.

Términos y herramientas de Docker

Algunas de las herramientas, términos y tecnologías que los desarrolladores encuentran cuando usan Docker incluyen: 

DockerFile

Cada contenedor Docker comienza con un archivo de texto simple que contiene instrucciones acerca de cómo crear la imagen de contenedor Docker. DockerFile automatiza el proceso de creación de imagen de Docker. Es esencialmente una lista de instrucciones de interfaz de línea de comando (CLI) que Docker Engine ejecutará para ensamblar la imagen. La lista de comandos de Docker es enorme, pero estandarizada: las operaciones de Docker funcionan igual independientemente del contenido, la infraestructura u otras variables del entorno. 

Imágenes de Docker

Las imágenes de Docker contienen el código de origen de la aplicación ejecutable, así como todas las herramientas, bibliotecas y dependencias que el código de la aplicación necesita 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 sola imagen base y compartirán los puntos en común de su solución. 

Las imágenes de Docker están formadas por capas y cada capa corresponde a una versión de la imagen. Siempre 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 reversiones o para reutilizarlas en otros proyectos. 

Cada vez que se crea un contenedor a partir de una imagen de Docker, se crea otra nueva capa llamada capa contenedora. Los cambios realizados en el contenedor, como la adición o eliminación de archivos, se guardan solo en la capa del contenedor y solo existen mientras el contenedor se está ejecutando. Este proceso iterativo de creación de imágenes permite una mayor eficiencia general, ya que varias instancias de contenedores en vivo pueden ejecutarse desde una sola imagen base y, cuando lo hacen, aprovechan una solución común. 

Contenedores Docker

Los contenedores Docker son las instancias activas y en ejecución de las imágenes de Docker. Si bien las imágenes de Docker son archivos de solo lectura, los contenedores son contenido en vivo, efímero y ejecutable. Los usuarios pueden interactuar con ellos y los administradores pueden ajustar su configuración y condiciones mediante los comandos de Docker. 

concentrador Docker

Docker Hub (enlace externo a ibm.com) es el repositorio público de imágenes de Docker que se autodenomina "la biblioteca y comunidad de imágenes de contenedores más grande del mundo". Contiene más de 100,000 imágenes de contenedores obtenidas de proveedores de software comercial, proyectos de código abierto y desarrolladores individuales. Incluye imágenes que han sido producidas por Docker, Inc., imágenes certificadas que pertenecen al Docker Trusted Registry y muchos miles de otras imágenes. 

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

También existen otros repositorios de imágenes, en particular GitHub. GitHub es un servicio de hosting 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 puede vincularse 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 Docker CLI, Docker Compose, Kubernetes y otros. También incluye acceso a Docker Hub. 

Daemon de Docker

Daemon de Docker es un servicio que crea y gestiona imágenes de Docker, utilizando los comandos del cliente. Esencialmente, el daemon de Docker sirve como el centro de control de su implementación de Docker. El servidor en el que se ejecuta el daemon de Docker se denomina host de Docker.

Registro de Docker

Un registro de Docker es un sistema escalable de almacenamiento y distribución de código abierto para imágenes de Docker. El registro le permite rastrear versiones de imágenes en repositorios, usando etiquetas para identificación. Esto se logra usando git, una herramienta de control de versiones. 

Implementación 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 de la industria. Pero para implementaciones que comprenden miles de contenedores y cientos de servicios, es casi imposible gestionar el flujo de trabajo sin la ayuda de algunas herramientas especialmente diseñadas.

Plug-ins de Docker

Los plug-ins de Docker (enlace externo a ibm.com) se pueden utilizar para hacer que Docker sea aún más funcional.Se incluyen varios plug-ins de Docker en el sistema de plug-ins de Docker Engine, y también se pueden cargar plug-ins de terceros. 

Docker Compose

Los desarrolladores pueden usar Docker Compose para gestionar aplicaciones de múltiples 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. 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 servicios. 

Kubernetes

Supervisar y gestionar los ciclos de vida de los contenedores en entornos más complejos requiere una herramienta de orquestación de contenedores.  Si bien Docker incluye su propia herramienta de orquestación (llamada Docker Swarm), la mayoría de los desarrolladores eligen Kubernetes en su lugar. 

Kubernetes es una plataforma de orquestación de contenedores de código abierto descendiente de un proyecto desarrollado para uso interno en Google. Kubernetes programa y automatiza tareas integrales para la gestión de arquitecturas basadas en contenedores, incluida la implementación de contenedores, actualizaciones, descubrimiento de servicios, aprovisionamiento de almacenamiento, equilibrio de carga, supervisión del estado y más. Además, el ecosistema de herramientas de código abierto para Kubernetes, que incluye Istio y Knative, permite a las organizaciones implementar una plataforma como servicio (PaaS) de alta productividad para aplicaciones en contenedores y una vía de acceso más rápida a la computación sin servidor.

Conozca más acerca de Kubernetes

Soluciones relacionadas
Red Hat® OpenShift on IBM Cloud

Red Hat OpenShift en IBM Cloud aprovecha OpenShift en entornos públicos e híbridos para obtener velocidad, capacidad de respuesta al mercado, escalabilidad y confiabilidad.

Conozca Red Hat OpenShift en IBM Cloud
IBM® Cloud Satellite

Con IBM® Cloud Satellite, puede implementar servicios en la nube consistentes en cualquier lugar: en las instalaciones, en el borde y en los entornos de nube pública.

Explore IBM® Cloud Satellite
Soluciones de almacenamiento de nube híbrida

Gracias a las soluciones de almacenamiento de nube híbrida de IBM, almacene datos en el lugar más conveniente para las aplicaciones y los servicios a través de una nube pública, privada y local.

Conozca las soluciones de almacenamiento en la nube híbrida
Servicios de nube

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

Explore los servicios en la nube
Recursos Contenedores en la empresa

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

Sirva modelos en Kubernetes u OpenShift usando contenedores independientes

Cree una imagen de contenedor independiente para servir modelos de NLP de Watson y luego ejecútela en un clúster de Kubernetes o Red Hat OpenShift

Dé el siguiente paso

Una plataforma de contenedores empresarial proporciona orquestación en múltiples nubes públicas y privadas, para unificar sus entornos para mejorar el rendimiento empresarial y el rendimiento operativo. Es un componente fundamental de una estrategia de nube híbrida abierta que le permite evitar la dependencia de un solo proveedor, crear y ejecutar cargas de trabajo en cualquier lugar con consistencia y optimizar y modernizar toda su TI. Implemente clústeres de Kubernetes totalmente gestionados y de alta disponibilidad con Red Hat OpenShift on IBM Cloud, un servicio gestionado de OpenShift que aprovecha la escala empresarial y la seguridad de IBM Cloud para automatizar las actualizaciones, el escalamiento y el suministro.

Explore Red Hat® OpenShift on IBM Cloud