Red de conocimiento informático - Material del sitio web - Cómo entender las principales diferencias entre LXC y Docker

Cómo entender las principales diferencias entre LXC y Docker

Descripción general de ambos

La tecnología de contenedores funciona de forma independiente y encapsula las cargas de trabajo de las aplicaciones fuera del sistema host. Piense en un contenedor como un sistema operativo dentro de un sistema operativo host donde se pueden instalar y ejecutar aplicaciones. A efectos prácticos, es como una máquina virtual.

El proyecto LXC proporciona un ejemplo mínimo de operaciones de contenedores para gestionar el ciclo de vida del contenedor de diferentes configuraciones y aplicaciones de espacio de usuario. Esta característica del proyecto LXC y el kernel de Linux permite habilitar correctamente el mecanismo de imitación.

Portabilidad

La tecnología de contenedores desacopla las aplicaciones del sistema operativo host, abstrayendo programas y haciéndolos livianos en cualquier sistema habilitado para LXC. Para decirlo a la ligera: funciona. Los usuarios pueden ejecutar cualquier programa en un contenedor (como ejecutar la pila LAMP en un contenedor) en una biblioteca tan primitiva y mínima de sistemas operativos Linux.

Debido a que las aplicaciones y las cargas de trabajo son relativamente independientes, los usuarios pueden ejecutar múltiples versiones de lenguajes como PHP, Python, Ruby y Apache, que pueden almacenarse y ocultarse en contenedores. Implementar la computación en la nube es como mover todas estas instancias y cargas de trabajo de manera flexible a otros sistemas, replicarlas y aprovisionarlas rápidamente.

¿No puede la tecnología de virtualización hacer esto?

No, no, no, no, la tecnología virtual también puede hacer esto, pero habrá un cierto grado de pérdida de rendimiento y reducción de flexibilidad. En lugar de emular una jerarquía de hardware, la tecnología de contenedores utiliza cgroups y espacios de nombres dentro del kernel de Linux para crear un entorno de sistema operativo virtualizado, liviano y de velocidad casi básica. Como el almacenamiento no está virtualizado, a la tecnología de contenedores no le importa el almacenamiento subyacente o el sistema de archivos; se ejecuta dondequiera que lo coloques;

Esto cambia fundamentalmente la forma en que virtualizamos cargas de trabajo y aplicaciones porque los contenedores son más rápidos, más simples y más eficientes que las tecnologías de virtualización de hardware para escalar elásticamente justo lo que necesitan sus cargas de trabajo, no Linux o un kernel de Linux específico. versión.

Entonces, ¿se acabó el juego para VMWare?

¡No tan rápido! La tecnología de virtualización es relativamente madura y existen varias herramientas y ecosistemas para respaldar su configuración en diferentes entornos. En el caso de las cargas de trabajo, requiere un sistema operativo que no sea Linux o solo puede utilizar tecnologías de virtualización centrales específicas.

LXC

LXC se originó a partir del desarrollo de grupos de nombres y espacios de nombres del kernel de Linux. Admite entornos de sistemas operativos de tecnología virtual livianos (tecnología de contenedores). Daniel Lezcano y Serge Hallyn lo completaron. primeros trabajos, que se remontan a 2009 en IBM.

LXC Systems proporciona herramientas para administrar contenedores, soporte avanzado de red y almacenamiento, y una variedad de plantillas mínimas de sistemas operativos de contenedores para elegir. Actualmente está dirigido por un equipo de dos personas: LXC funciona con Ubuntu.

Cómo diferenciarlos

El propósito de Docker de producción es minimizar la cantidad de programas que se ejecutan en el contenedor, ejecutar solo un programa y administrar ese programa a través de Docker.

Con Docker, las aplicaciones subyacentes se pueden configurar, conectar en red, almacenar y coordinar a través de Docker.

LXC evita este problema en entornos normales de sistemas operativos, por lo que es rápidamente compatible con todas las aplicaciones y herramientas, y cualquier jerarquía de administración y creación, reemplazando a las máquinas virtuales.

Además de que Docker use jerarquías (deshabilitando la persistencia del almacenamiento), LXC también admite jerarquías y superposiciones AUFS, amplio soporte para clones e instantáneas de COW con brtfs, ZFS, LVM Thin e integra opciones. Déjelo en manos del usuario. . El almacenamiento descentralizado en la tecnología de contenedores LXC se monta de forma limitada y llega al host u otro contenedor para el usuario.

Tanto Docker como LXC configuran una red NAT predeterminada. Además, Docker también configura el reenvío de puertos para el host usando el indicador -p, por ejemplo, "-p80:80" reenvía 80 desde el host al contenedor. Con NAT, el host local puede acceder al contenedor directamente a través de IP, y cuando un servicio externo lo necesita, simplemente se hace a través de reglas de IPtable, y cuando se consume un servicio externo, es solo una cuestión de reenvío de puertos. En cuanto a por qué esto es necesario, las razones aún no están claras.

Para complicar aún más las cosas, Docker casi no ofrece control de IP y archivos de host, por lo que no se puede establecer una IP estática para un contenedor, lo cual es un poco confuso para la tarea de asignación de IP. Necesitamos conectar el contenedor usando el indicador "--Links", que agregará una entrada en /etc/hosts para el contenedor conectado.

Con LXC, es más fácil asignar IP estáticas, IP dinámicas, usar múltiples dispositivos de red, usar el archivo /etc/hosts y básicamente tener acceso ilimitado a toda la pila de redes de Linux. ¿Quiere conectarse al contenedor en el host? Los usuarios pueden configurar rápidamente jerarquías utilizando GRE, L2TPV3 o VXLAN o cualquier tecnología de red que esté en uso.

La tecnología de contenedores LXC ejecuta sin problemas todo lo que ejecuta una máquina virtual.

Docker

Docker fue lanzado por dotCloud (ahora Docker) en marzo de 2013, originalmente como un proyecto basado en LXC para crear contenedores de aplicaciones individuales. Docker ahora ha desarrollado sus propias herramientas para utilizar directamente el espacio de nombres principal y cgroup:libcontainer.

Contenedores en capas

Docker inicialmente construyó contenedores en capas basados ​​en el soporte de LXC para Aufs. Dado que los Aufs no pueden fusionarse en el núcleo, ahora está comenzando a agregar soporte para Aufs. mapeo de dispositivos y soporte de superposición.

La tecnología de contenedor Docker consta de imágenes base. Cuando la confirmación se convierta en una imagen de Docker, se agregará otro panel en capas. Cuando ejecuta una imagen, se lanza una copia de ella como contenedor y los datos que contiene son solo temporales hasta que se confirman. Cada confirmación es un espejo independiente, por lo que puedes comenzar desde un espejo.

Proporcionamos una guía en "Cómo usar superposiciones LXC" que explica cómo funciona la estructura en capas. En consorcios de sistemas de archivos como Aufs o superposiciones (que varían en implementación, rendimiento y soporte para una cierta cantidad de capas inferiores), las capas inferiores son de solo lectura, mientras que las capas superiores son de lectura y escritura en tiempo de ejecución. El contenido del contenedor suele ser el sistema operativo base, pero no es necesario, mientras que usted puede modificar los paneles superiores.

Si bien la idea de paneles de capas de gráficos suena bien, los sistemas de archivos en capas todavía son técnicamente inmaduros y existen complejidades inherentes y penalizaciones de rendimiento al usar capas de gráficos. Atrapado en un Layer Plate es un ejemplo de una aventura de la vida real que quizás quieras ver.

Contenedor de aplicación única

Docker limita la tecnología de contenedores a ejecutar un solo proceso. La plantilla del sistema operativo de imagen subyacente de Docker no está diseñada para ejecutar múltiples aplicaciones, procesos o servicios (como init, cron, syslog, ssh, etc.).

Echemos un vistazo a las primeras cosas que trajeron cierta complejidad a los escenarios de los usuarios cotidianos.

Tome una aplicación simple como WordPress como ejemplo. Es posible que necesite configurar 3 contenedores para consumir los servicios de cada uno: contenedor PHP, contenedor Nginx y contenedor MySQL, además de 2 contenedores de persistencia de archivos MysqlDB y WordPress, respectivamente. para datos. Luego instale los archivos de WordPress con los permisos adecuados para que se puedan usar PHP-FPM y Nginx, y luego encuentre una manera de permitir que estos contenedores se comuniquen entre sí en la red local sin la necesidad de controlar la red a tiempo o configurar la IP por el demonio Docker! ¡Pero aún no hemos considerado cron y correo electrónico para la administración de cuentas de WordPress!

Para ejecutar varios programas en Docker, necesita un script de shell o un administrador de programas independiente (como runit o manager). Pero el ecosistema Docker considera que esto es un "antipatrón" y toda la arquitectura de Docker se basa en la ejecución de un único programa en un contenedor.

Repositorio de códigos

Docker proporciona a los usuarios una base de datos pública o privada de imágenes push y pull. Esto es algo similar a cómo la tienda de aplicaciones Flockport prepara a los usuarios para usar contenedores. De esta forma, los usuarios pueden compartir y distribuir aplicaciones fácilmente.

Dockerfile

Un Dockerfile es un script que le indica a Docker cómo crear un contenedor a partir de una imagen que contiene una aplicación específica. Es similar a crear un contenedor LXC mediante un script bash utilizando una aplicación específica que ya está instalada.

Las diferencias con LXC

El equipo de Docker debe volver a cargar las características de LXC para implementar estas características y hacerlas disponibles en Docker; por ejemplo, LXC ahora admite contenedores no autorizados, lo que permite usuarios root para crear y configurar contenedores, LXC ahora también trabaja en la migración en vivo y la administración de múltiples hosts. Estos son enormes avances para los contenedores, que allanan el camino para una mayor seguridad, cargas de trabajo multiinquilino y paridad virtual.

Actualmente, Docker no admite estas funciones. Con el reciente lanzamiento de libcontainer, la brecha entre los dos puede ampliarse.

No existe una forma correcta o incorrecta de ejecutar un contenedor. La forma de utilizar el contenedor depende principalmente del usuario, y el método de Docker es único y, por lo tanto, también hará que la personalización sea la única forma de hacerlo. Docker necesita encontrar una manera de completar el trabajo, desde la instalación y ejecución de la aplicación hasta el escalado elástico.