Llegamos a ustedes gracias a:



Reportajes y análisis

¿Qué son los contenedores y por qué los necesita?

Docker FAQ

[27/05/2015] Docker saltó a la escena hace un par de años, y ha causado sensación en los círculos de TI desde entonces.

La tecnología de contenedor ofrecida por Docker promete cambiar la forma en que las operaciones de TI se llevan a cabo, tal como lo hizo la tecnología de virtualización unos cuantos años atrás.

He aquí una lista de las 10 preguntas más comunes relacionadas a esta tecnología.

¿Qué son los contenedores y por qué los necesita?

Los contenedores son una solución al problema de cómo hacer que el software se ejecute de manera confiable cuando se mueve de un entorno de cómputo a otro. Esto puede ser de la laptop de un desarrollador a un entorno de prueba, de un entorno de una etapa hacia producción, y quizás desde una máquina virtual en un centro de datos hacia una máquina virtual en una nube pública o privada.

Se pueden usar contenedores, y si no desea gestionar el hardware, entonces use también virtualización.

Los problemas surgen cuando el entorno de software de soporte no es idéntico, señala Solomon Hykes, creador de Docker: "Usted hace una prueba usando Python 2.7, y en producción va a correr en Python 3 y algo raro ocurre. O confía en el comportamiento de determinada versión de una librería SSL y se instalará otra. Correrá sus pruebas en Debian y la producción se hará sobre Red Hat y toda clase de cosas extrañas ocurrirán.

Y no es solo el software diferente lo que puede hacer la diferencia, añade. "La topología de la red puede ser diferente, o las políticas de seguridad y almacenamiento podrían ser diferentes, pero el software tiene que correr sobre esto.

¿Cómo intentan los contenedores resolver este problema?

En sencillo, un contenedor consiste en un entorno de ejecución completo: una aplicación, además de todas sus dependencias, librerías y otros archivos binarios y de configuración necesarios para la ejecución, amarrados en un paquete. Al hacer la contenerización la plataforma de aplicación y sus dependencias, diferencias en distribuciones de sistemas operativos e infraestructura subyacente son abstraídos.

Esto suena como virtualización. ¿Cuál es la diferencia?

Con la tecnología de virtualización, el paquete que puede ser pasado es una máquina virtual e incluye un sistema operativo completo así como la aplicación. Un servidor físico corriendo tres máquinas virtuales debería tener un hipervisor y tres sistemas operativos corriendo por separado encima de todo.

Por el contrario, un servidor que corre tres aplicaciones contenerizadas, como con Docker, corre un solo sistema operativo, y cada contenedor comparte el kernel del sistema operativo con los otros contenedores. Las partes compartidas del sistema operativo son solo de lectura, aunque cada contendor tiene su propia montura (por ejemplo, una forma de acceder al contenedor) para escritura. Eso significa que los contenedores son mucho más livianos y utilizan mucho menos recursos que las máquinas virtuales.

¿Qué diferencia hace esto en la práctica?

Un contenedor puede tener solo decenas de megabytes de tamaño, mientras que una máquina virtual con su propio sistema operativo completo puede tener varios gigabytes de tamaño.

Debido a esto, un solo servidor puede alojar más contenedores que máquinas virtuales. Las máquinas virtuales pueden tomar varios minutos en arrancar sus sistemas operativos y comenzar a ejecutar las aplicaciones que almacenan; las aplicaciones contenerizadas pueden comenzar casi instantáneamente.

Si los contenedores comparten un sistema operativo, ¿qué tan seguros pueden ser?

El consenso es que los contenedores no son tan seguros como las máquinas virtuales. La razón es que si hay una vulnerabilidad en el kernel, puede ofrecer una vía hacia los contenedores que lo comparten (aunque SELinux puede ayudar). Esto también es verdad con un hipervisor, pero debido a que un hipervisor ofrece mucha menos funcionalidad que un típico kernel Linux (el cual típicamente implementa sistemas de archivos, redes, control de procesos de aplicaciones, etc.) presenta una superficie de ataque mucho más pequeña.

Para resumir, los contenedores generalmente no pueden ofrecer el mismo nivel de aislamiento como la virtualización de hardware.

¿Cuál es la diferencia entre Docker y los contenedores?

Docker se ha convertido en sinónimo de tecnología de contenedores porque ha sido el más exitoso en popularizarse. Pero la tecnología de contenedor no es nueva: ha estado incrustada en Linux en forma de LXC por casi 10 años, y una virtualización similar de nivel de sistema operativo también ha sido ofrecida por FreeBSD, AIX Workload Partitions y Solaris Containers.

Y hoy en día Docker no es el único jugador para Linux. Una notable alternativa es rkt, una herramienta de línea de comando para correr contenedores de apps producida por CoreOS. Rkt es capaz de manejar contenedores Docker así como aquellos que cumplan con la especificación App Container Image.

Una razón para lanzar rkt es que Docker se ha vuelto demasiado grande y ha perdido simplicidad, de acuerdo a Alex Polvi, CEO de CoreOS. "Docker ahora está desarrollando herramientas para lanzar servidores de nube, sistemas para clustering, y un amplio rango de funciones: construir imágenes, uploading, descargas y eventualmente hasta llegar a networking, todo compilado en un binario monolítico corriendo principalmente como root en su servidor, señala.

Kelsey Hightower, abogado principal de CoreOS, añade que las imágenes del App Container buscan ser más seguras que las imágenes de Docker porque están firmadas por sus creadores. "Creo que los usuarios desean firmas, al estilo en que Apple firma las apps en la AppStore, anota. "Cuando usa rkt y jala una imagen del App Container, usted decide si confía en el desarrollador antes de ejecutarla. Rkt también puede ejecutar imágenes Docker, pero no siempre serán firmadas.

¿En qué sistemas operativos deberían correr Docker y rkt?

LXC (y libcontainer, la tecnología propietaria de contenedor de Docker que reemplaza a LXC) está basado en Linux, así que cualquier distribución de Linux con un kernel bastante moderno como el 3.8 o más reciente puede ejecutarlos en hardware x64.

La mayoría de distribuciones de Linux son innecesariamente pesadas en funciones si se intentan usar en contenedores. Esto no es sorpresa, ya que una cantidad de distribuciones de Linux han cortado lo que fue diseñado específicamente para correr contenedores. Algunos ejemplos incluyen el CoreOS, Project Atomic de Red Hat, Snappy Ubuntu de Canonical, y Project Photon de VMware.

¿Hay soluciones de contenedor para Linux comercial?

Sí. Incluyen las siguientes:

  • Docker Subscription for Enterprise: Una solución en bundle que incluye Docker Hub Enterprise, Docker Engine, y una suscripción de soporte comercial.
  • CoreOS Tectonic: Una pila integrada de software CoreOS que incluye una consola de administración para flujos de trabajo y panel de control, un registro integrado para construir y compartir contenedores Linux, y herramientas adicionales para automatizar el despliegue y personalizar la ejecución de actualizaciones, junto con la plataforma de gestión de contendedores Kubernetes de Google.

¿Qué sucede si soy usuario de Windows? ¿Puedo seguir utilizando contenedores?

Microsoft ha anunciado que llevará la tecnología de contenedor de Docker a Windows Server, así como introducirá Windows Server Containers, los cuales correrán en servidores Windows.

Una versión "delgada de Windows Server llamada Nano Server, la cual está específicamente diseñada para correr contenedores, también será presentada. Similar en concepto al Windows Server Core del Windows Server 2008, tendrá aproximadamente el 5% del tamaño de una instalación típica de Windows Server.

¿Los contenedores eventualmente reemplazarán la virtualización completa de servidores?

Eso es poco probable en el corto plazo, por la razón de que las máquinas virtuales ofrecen mejor seguridad que los contenedores.

Las herramientas de gestión que están disponibles para orquestar grandes cantidades de contenedores también están lejos de ser tan amplias como el software vCenter de VMware o el System Center de Microsoft, que puede ser utilizado para gestionar infraestructura virtualizadas.

También es probable que la virtualización y los contenedores puedan llegar a ser vistos como tecnologías complementarias en lugar de competidoras. Eso es debido a que los contenedores pueden correr en máquinas virtuales ligeras para incrementar el aislamiento e incrementar la seguridad, y porque la virtualización de hardware hace mucho más fácil gestionar la infraestructura de hardware como redes, servidores y almacenamiento, que es necesaria para soportar los contenedores.

"La mayoría de personas no desean administrar hardware, así que lo colocan en VMware y lo gestionan en el software, señala Hightower.

"Los contenedores no cambian nada. Se puede usar contenedores, y si no desea administrar el hardware, entonces utilice también la virtualización.

Paul Rubens, CIO (EE.UU.)