¿Qué agrega Docker a lxc-tools (las herramientas LXC del espacio de usuario)?

Resuelto Flimm asked hace 11 años • 5 respuestas

Si echa un vistazo a las funciones de Docker, la mayoría de ellas ya las proporciona LXC.

Entonces, ¿qué agrega Docker? ¿Por qué debería usar Docker en lugar de LXC simple?

Flimm avatar Aug 01 '13 15:08 Flimm
Aceptado

De las preguntas frecuentes de Docker :

Docker no reemplaza a lxc. "lxc" se refiere a las capacidades del kernel de Linux (específicamente espacios de nombres y grupos de control) que permiten aislar procesos entre sí y controlar sus asignaciones de recursos.

Además de esta base de bajo nivel de características del kernel, Docker ofrece una herramienta de alto nivel con varias funcionalidades poderosas:

  • Implementación portátil en todas las máquinas. Docker define un formato para agrupar una aplicación y todas sus dependencias en un único objeto que puede transferirse a cualquier máquina habilitada para Docker y ejecutarse allí con la garantía de que el entorno de ejecución expuesto a la aplicación será el mismo. Lxc implementa procesos de sandboxing, que es un requisito previo importante para la implementación portátil, pero eso por sí solo no es suficiente para la implementación portátil. Si me enviara una copia de su aplicación instalada en una configuración lxc personalizada, es casi seguro que no se ejecutará en mi máquina como lo hace en la suya, porque está ligada a la configuración específica de su máquina: redes, almacenamiento, registro, distribución, etc. Docker define una abstracción para estas configuraciones específicas de la máquina, de modo que exactamente el mismo contenedor Docker pueda ejecutarse, sin cambios, en muchas máquinas diferentes, con muchas configuraciones diferentes.

  • Centrado en aplicaciones. Docker está optimizado para la implementación de aplicaciones , a diferencia de máquinas. Esto se refleja en su API, interfaz de usuario, filosofía de diseño y documentación. Por el contrario, los scripts auxiliares de lxc se centran en los contenedores como máquinas livianas, básicamente servidores que arrancan más rápido y necesitan menos RAM. Creemos que los contenedores son mucho más que eso.

  • Construcción automática . Docker incluye una herramienta para que los desarrolladores ensamblen automáticamente un contenedor a partir de su código fuente, con control total sobre las dependencias de las aplicaciones, herramientas de compilación, empaquetado, etc. Son de uso gratuito: make, maven, chef, puppet, salt, paquetes debian, rpms, source. tarballs, o cualquier combinación de los anteriores, independientemente de la configuración de las máquinas .

  • Versionado. Docker incluye capacidades similares a las de Git para rastrear versiones sucesivas de un contenedor, inspeccionar la diferencia entre versiones, confirmar nuevas versiones, revertir, etc. El historial también incluye cómo se ensambló un contenedor y quién lo hizo, para que pueda obtener una trazabilidad completa desde el servidor de producción. todo el camino de regreso al desarrollador ascendente. Docker también implementa cargas y descargas incrementales, similar a "git pull", por lo que se pueden transferir nuevas versiones de un contenedor enviando únicamente diferencias.

  • Reutilización de componentes. Cualquier contenedor se puede utilizar como "imagen base" para crear componentes más especializados. Esto se puede hacer manualmente o como parte de una compilación automatizada. Por ejemplo, puedes preparar el entorno Python ideal y utilizarlo como base para 10 aplicaciones diferentes. Su configuración postgresql ideal puede reutilizarse para todos sus proyectos futuros. Etcétera.

  • Intercambio. Docker tiene acceso a un registro público ( https://registry.hub.docker.com/ ) donde miles de personas han subido contenedores útiles: cualquier cosa, desde redis, CouchDB, Postgres hasta irc Bouncers, servidores de aplicaciones Rails, Hadoop e imágenes base para varias distribuciones. El registro también incluye una "biblioteca estándar" oficial de contenedores útiles mantenida por el equipo de Docker. El registro en sí es de código abierto, por lo que cualquiera puede implementar su propio registro para almacenar y transferir contenedores privados, por ejemplo, para implementaciones de servidores internos.

  • Ecosistema de herramientas. Docker define una API para automatizar y personalizar la creación e implementación de contenedores. Existe una gran cantidad de herramientas que se integran con Docker para ampliar sus capacidades. Implementación tipo PaaS (Dokku, Deis, Flynn), orquestación de múltiples nodos (maestro, salt, mesos, openstack nova), paneles de administración (docker-ui, openstack horizonte, shipyard), administración de configuración (chef, puppet), integración continua (jenkins, strider, travis), etc. Docker se está estableciendo rápidamente como el estándar para herramientas basadas en contenedores.

Solomon Hykes avatar Aug 13 '2013 11:08 Solomon Hykes

Echemos un vistazo a la lista de características técnicas de Docker y verifiquemos cuáles las proporciona LXC y cuáles no.

Características:

1) Aislamiento del sistema de archivos : cada contenedor de procesos se ejecuta en un sistema de archivos raíz completamente separado.

Provisto de LXC simple.

2) Aislamiento de recursos : los recursos del sistema, como la CPU y la memoria, se pueden asignar de manera diferente a cada contenedor de procesos, utilizando cgroups.

Provisto de LXC simple.

3) Aislamiento de red : cada contenedor de procesos se ejecuta en su propio espacio de nombres de red, con una interfaz virtual y una dirección IP propia.

Provisto de LXC simple.

4) Copia en escritura : los sistemas de archivos raíz se crean mediante copia en escritura, lo que hace que la implementación sea extremadamente rápida y con un bajo costo de memoria y disco.

Esto lo proporciona AUFS, un sistema de archivos de unión del que depende Docker. Puede configurar AUFS usted mismo manualmente con LXC, pero Docker lo usa como estándar.

5) Registro : los flujos estándar (stdout/stderr/stdin) de cada contenedor de proceso se recopilan y registran para su recuperación en tiempo real o por lotes.

Docker proporciona esto.

6) Gestión de cambios : los cambios en el sistema de archivos de un contenedor se pueden enviar a una nueva imagen y reutilizarse para crear más contenedores. No se requieren plantillas ni configuración manual.

"Creación de plantillas o configuración manual" es una referencia a LXC, donde necesitaría aprender sobre ambas cosas. Docker le permite tratar los contenedores de la forma en que está acostumbrado a tratar las máquinas virtuales, sin necesidad de aprender sobre la configuración de LXC.

7) Shell interactivo : Docker puede asignar un pseudo-tty y adjuntarlo a la entrada estándar de cualquier contenedor, por ejemplo, para ejecutar un shell interactivo desechable.

LXC ya proporciona esto.


Recién comencé a aprender sobre LXC y Docker, por lo que agradecería cualquier corrección o mejores respuestas.

Flimm avatar Aug 01 '2013 08:08 Flimm

La publicación y las respuestas anteriores se están volviendo obsoletas rápidamente a medida que el desarrollo de LXD continúa mejorando LXC . Sí, sé que Docker tampoco se ha quedado quieto.

LXD ahora implementa un repositorio para imágenes de contenedores LXC del que un usuario puede insertar/extraer para contribuir o reutilizar.

La API REST de LXD para LXC ahora permite la creación/implementación/administración local y remota de contenedores LXC utilizando una sintaxis de comando muy simple.

Las características clave de LXD son:

  • Seguro por diseño (contenedores sin privilegios, restricciones de recursos y mucho más)
  • Escalable (desde contenedores en su computadora portátil hasta miles de nodos informáticos)
  • Intuitivo (API simple y clara y experiencia de línea de comandos nítida)
  • Basado en imágenes (no más plantillas de distribución, solo imágenes buenas y confiables) Migración en vivo

Ahora existe un complemento NCLXD para OpenStack que permite a OpenStack utilizar LXD para implementar/administrar contenedores LXC como máquinas virtuales en OpenStack en lugar de usar KVM, vmware, etc.

Sin embargo, NCLXD también permite una nube híbrida de una combinación de máquinas virtuales HW tradicionales y máquinas virtuales LXC.

El complemento OpenStack nclxd incluye una lista de funciones admitidas:

stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support

Para cuando se lance Ubuntu 16.04 en abril de 2016, habrá características interesantes adicionales, como soporte para dispositivos de bloque y soporte para migración en vivo .

bmullan avatar Dec 19 '2015 14:12 bmullan

Los Dockers utilizan imágenes construidas en capas. Esto añade mucho en términos de portabilidad, uso compartido, control de versiones y otras características. Estas imágenes son muy fáciles de portar o transferir y, dado que están en capas, los cambios en versiones posteriores se agregan en forma de capas sobre las capas anteriores. Por lo tanto, al realizar la portabilidad muchas veces, no es necesario trasladar las capas base. Los Dockers tienen contenedores que ejecutan estas imágenes con el entorno de ejecución contenido, agregan cambios como nuevas capas que brindan un fácil control de versiones.

Aparte de eso, Docker Hub es un buen registro con miles de imágenes públicas, donde puedes encontrar imágenes que tienen el sistema operativo y otros softwares instalados. Por lo tanto, puede obtener una buena ventaja para su aplicación.

div avatar May 29 '2015 08:05 div