
Docker
Docker
¿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 se han vuelto cada vez más populares a medida que las organizaciones cambian al desarrollo nativo de la nube y entornos híbridos multinube.
Los desarrolladores pueden crear contenedores sin Docker, pero la plataforma permite crear, implementar y gestionar contenedores de forma más fácil, sencilla y segura. Docker es esencialmente un kit de herramientas que permite a los desarrolladores crear, implementar, ejecutar, actualizar y detener contenedores utilizando comandos simples y automatización que ahorra trabajo a través de 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 de Docker (enlace externo a IBM), a la que colaboran Docker, Inc. y muchas otras organizaciones e individuos.
Cómo funcionan los contenedores y por qué son tan populares
Contenedores son posibles gracias al aislamiento de procesos y a las capacidades de virtualización integradas en el kernel de Linux. Estas funcionalidades, como grupos de control (Cgroups) para asignar recursos entre procesos, y espacios de nombres para restringir un acceso de procesos o visibilidad a otros recursos o áreas del sistema, habilitan varios componentes de aplicación para compartir los recursos de una sola instancia del sistema operativo de host de la misma forma 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 contenedor ofrece toda la funcionalidad y beneficios de las máquinas virtuales, incluyendo aislamiento de aplicaciones, escalabilidad rentable y capacidad de disposición, además de otras ventajas importantes:
- 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. Sólo incluyen los procesos y dependencias del sistema operativo 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 contenedores, puede ejecutar varias veces más copias de una aplicación en el mismo hardware que puede utilizar las máquinas virtuales. Esto puede reducir el gasto en la nube.
- Mayor productividad de los desarrolladores: en comparación con las VM, los contenedores son más rápidos y fáciles de implementar, suministrar y reiniciar. Esto los hace ideales para utilizarlos en las líneas de trabajo de integración continua y entrega continua (CI/CD) y un mejor ajuste para los equipos de desarrollo que adoptan las prácticas Agile y DevOps.
Las empresas que utilizan contenedores reportan otros beneficios, incluyendo una mejor calidad de la aplicación, 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.4MB)
¿Por qué utilizar Docker?
Docker es tan popular hoy que "Docker" y "contenedores" se utilizan indistintamente. Pero las primeras tecnologías relacionadas con los contenedores estuvieron disponibles durante años, incluso décadas (enlace externo a IBM), antes de que Docker fuera lanzado al público en 2013.
Sobre todo, en 2008, LinuXContainers (LXC) se implementó en el kernel de Linux, lo que habilitó completamente la virtualización para una sola instancia de Linux. Mientras que LXC todavía se utiliza hoy, las nuevas tecnologías que utilizan el kernel de Linux están disponibles. Ubuntu, un sistema operativo Linux moderno y de código abierto, también proporciona esta capacidad.
Docker ha mejorado las capacidades nativas de contenerización de Linux con tecnologías que permiten:
- Portabilidad mejorada y continua: 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 desktop, centro de datos y nube.
- Peso aún más ligero y actualizaciones más granulares: Con LXC, se pueden combinar varios procesos dentro de 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 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 de origen de la aplicación.
- Control de versiones de contenedor: Docker puede rastrear versiones de una imagen de contenedor, retrotraer a versiones anteriores y rastrear quién creó una versión y cómo. Puede incluso cargar sólo 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 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 el servidor Microsoft Windows. Y la mayoría de los proveedores de nube ofrecen servicios específicos para ayudar a los desarrolladores a crear, enviar y ejecutar aplicaciones en contenedores con Docker.
Por estas razones, la adopción de Docker creció rápidamente y continúa aumentando. En este artículo, Docker Inc. informa 11 millones de desarrolladores y 13 mil millones de descargas de imágenes de contenedores cada mes (enlace externo a IBM).
Herramientas y términos de Docker
Algunas de las herramientas y la terminología que encontrará al utilizar Docker incluyen:
DockerFile
Cada contenedor Docker se inicia 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 interfaz de línea de comandos (CLI) que Docker Engine ejecutará para ensamblar la imagen.
Imágenes Docker
Las imágenes Docker contienen código de origen de aplicación ejecutable, así como todas las herramientas, bibliotecas y dependencias que el código de aplicación debe ejecutar como 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 los sacan de los repositorios comunes. Se pueden crear varias imágenes Docker a partir de una única imagen base, y compartirán los puntos en común de su lote.
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, y 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 se vuelven a utilizar en otros proyectos.
Cada vez que se crea un contenedor a partir de una imagen de Docker, se crea otra nueva capa denominada capa de contenedor. Los cambios realizados en el contenedor, como la adición o supresión de archivos, sólo se guardan en la capa de contenedor y sólo existen mientras se ejecuta el contenedor. Este proceso iterativo de creación de imágenes permite aumentar la eficiencia general ya que varias instancias de contenedores en vivo pueden ejecutarse desde una única imagen base, y cuando lo hacen, aprovechan un lote común.
Contenedores Docker
Los contenedores Docker son las instancias activas en ejecución de imágenes Docker. Mientras que las imágenes Docker son archivos de sólo lectura, los contenedores son contenido en vivo, efímero y ejecutable. Los usuarios pueden interactuar con ellos, y los administradores pueden ajustar sus valores y condiciones utilizando comandos Docker.
Docker Hub
Docker Hub (enlace externo a IBM) es el repositorio público de imágenes Docker que se denomina a sí mismo la "biblioteca y comunidad más grande del mundo para 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 que han sido producidas por Docker, Inc., imágenes certificadas pertenecientes a Docker Trusted Registry, y muchas otros miles de 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 para utilizarlas como punto de partida para cualquier proyecto de contenerización.
Daemon Docker
El daemon Docker es un servicio que se ejecuta en el sistema operativo, como Microsoft Windows o Apple MacOS o iOS. Este servicio crea y gestiona las imágenes Docker utilizando los comandos del cliente, actuando como el 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 le permite realizar un seguimiento de las versiones de imagen en los repositorios, utilizando el etiquetado para la identificación. Esto se logra utilizando git, una herramienta de control de versiones.
Implementación y orquestación de Docker
Si está ejecutando sólo unos pocos contenedores, es bastante sencillo gestionar su aplicación dentro de Docker Engine, el tiempo de ejecución de facto de la industria. Pero si su implementación está formada por miles de contenedores y cientos de servicios, es casi imposible gestionar ese flujo de trabajo sin la ayuda de estas herramientas creadas específicamente.
Docker Compose
Si está creando una aplicación fuera de procesos en varios contenedores que residen en el mismo host, puede utilizar Docker Compose para gestionar la arquitectura de la aplicación. Docker Compose crea un archivo YAML que especifica qué servicios se incluyen en la aplicación y puede implementar y ejecutar contenedores con un único comando. 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 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 planifica y automatiza las tareas integradas en la gestión de arquitecturas basadas en contenedores, incluida la implementación de contenedores, las actualizaciones, el descubrimiento de servicios, el suministro de almacenamiento, el equilibrio de carga, la supervisión del estado y más. Además, el ecosistema de código abierto de herramientas para Kubernetes, incluyendo Istio y Knative, permite a las organizaciones implementar una Plataforma como servicio (PaaS) de alta productividad para aplicaciones en múltiples contenedores y una incorporación de acceso más rápida a la computación sin servidor.
Para profundizar en Kubernetes, vea el video “Kubernetes Explained”:
Kubernetes Explained (10:59)
Docker e IBM Cloud
Una plataforma de contenedor empresarial proporciona orquestación a través de múltiples nubes públicas y privadas, para unificar sus entornos para mejorar el rendimiento empresarial y el rendimiento operativo. Es un componente clave de una estrategia de nube híbrida abierta que le permite evitar el bloqueo de proveedores, crear y ejecutar cargas de trabajo en cualquier lugar con consistencia y optimizar y modernizar toda su TI.
Dé el siguiente paso:
- Implemente 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, escalamiento y suministro.
- Implemente y ejecute aplicaciones en entornos locales, de edge computing y de nube pública de cualquier proveedor con IBM Cloud Satellite, una solución de nube distribuida gestionada
- Simplifique y consolide sus data lakes implementando de forma continua el almacenamiento empresarial habilitado para contenedores en entornos de nube pública y locales con Soluciones de almacenamiento de nube híbrida de IBM
- Haga que la gestión de TI híbrida compleja sea sencilla con Servicios gestionados por IBM Cloud.
Empiece hoy mismo con una cuenta de IBM Cloud.