library - docker-compose
¿Qué agrega Docker a lxc-tools(las herramientas LXC del espacio de usuario)? (5)
Si echa un vistazo a las características de Docker, la mayoría de ellas ya las proporciona LXC.
Entonces, ¿qué agrega Docker? ¿Por qué usaría Docker sobre LXC simple?
De las preguntas frecuentes de Docker :
Docker no es un reemplazo para lxc. "lxc" se refiere a las capacidades del kernel de Linux (específicamente espacios de nombres y grupos de control) que permiten los procesos de sandboxing entre sí, y controlan sus asignaciones de recursos.
Además de esta base de características de núcleo de bajo nivel, Docker ofrece una herramienta de alto nivel con varias funcionalidades poderosas:
Implementación portátil a través de máquinas. Docker define un formato para agrupar una aplicación y todas sus dependencias en un solo objeto que puede transferirse a cualquier máquina habilitada para la ventana acoplable y ejecutarse allí con la garantía de que el entorno de ejecución expuesto a la aplicación será el mismo. Lxc implementa el sandboxing de procesos, que es un requisito previo importante para la implementación portátil, pero eso 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á vinculada a la configuración específica de su máquina: redes, almacenamiento, registro, distro, Docker define una abstracción para estas configuraciones específicas de la máquina, de modo que el mismo contenedor de la ventana acoplable puede ejecutarse, sin cambios, en muchas máquinas diferentes, con muchas configuraciones diferentes.
Centrado en la aplicación. Docker está optimizado para la implementación de aplicaciones , a diferencia de las máquinas. Esto se refleja en su API, interfaz de usuario, filosofía de diseño y documentación. Por el contrario, los scripts lxc helper se centran en contenedores como máquinas ligeras, básicamente servidores que arrancan más rápido y necesitan menos ram. Creemos que hay más en los contenedores que solo eso.
Construcción automática . Docker incluye una herramienta para que los desarrolladores armen automáticamente un contenedor a partir de su código fuente, con control total sobre las dependencias de las aplicaciones, herramientas de construcción, empaques, etc. Son de uso gratuito make, maven, chef, puppet, salt, debian packages, rpms, source tarballs, o cualquier combinación de los anteriores, independientemente de la configuración de las máquinas .
Versiones Docker incluye capacidades similares a git para rastrear versiones sucesivas de un contenedor, inspeccionar la diferencia entre versiones, realizar nuevas versiones, revertir, etc. El historial también incluye cómo se ensambla un contenedor y quién lo hace, por lo que obtiene una trazabilidad completa desde el servidor de producción. todo el camino de vuelta al desarrollador upstream. Docker también implementa cargas y descargas incrementales, similares a "git pull", por lo que las nuevas versiones de un contenedor se pueden transferir enviando solo diffs.
Reutilización de componentes. Cualquier contenedor se puede utilizar como una "imagen base" para crear componentes más especializados. Esto se puede hacer manualmente o como parte de una compilación automatizada. Por ejemplo, puede 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. Y así.
Compartiendo Docker tiene acceso a un registro público ( https://registry.hub.docker.com/ ) donde miles de personas han cargado contenedores útiles: desde redis, couchdb, postgres hasta irc bouncers hasta rieles a los servidores de aplicaciones, hadoop e imágenes base para Distros Distros. El registro también incluye una "biblioteca estándar" oficial de contenedores útiles mantenidos por el equipo de docker. El registro en sí mismo es de código abierto, por lo que cualquier persona puede implementar su propio registro para almacenar y transferir contenedores privados, por ejemplo, para implementaciones internas de servidores.
Herramienta de ecosistema. Docker define una API para automatizar y personalizar la creación y el despliegue de contenedores. Existe una gran cantidad de herramientas que se integran con la ventana acoplable para ampliar sus capacidades. Implementación tipo PaaS (Dokku, Deis, Flynn), orquestación de múltiples nodos (maestro, salt, mesos, openstack nova), paneles de control (docker-ui, openstack horizon, astillero), gestión de la 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.
¡Espero que esto ayude!
Echemos un vistazo a la lista de características técnicas de Docker , y compruebe cuáles son proporcionadas por LXC y cuáles no.
caracteristicas:
1) Aislamiento del sistema de archivos : cada contenedor de proceso se ejecuta en un sistema de archivos raíz completamente separado.
Provisto de LXC liso.
2) Aislamiento de recursos : los recursos del sistema como cpu y memoria pueden asignarse de manera diferente a cada contenedor de proceso, utilizando cgroups.
Provisto de LXC liso.
3) Aislamiento de la red : cada contenedor de proceso se ejecuta en su propio espacio de nombres de red, con una interfaz virtual y una dirección IP propia.
Provisto de LXC liso.
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, barata en memoria y en disco.
Esto es proporcionado por AUFS, un sistema de archivos de unión del que Docker depende. Puede configurar AUFS 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 la 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 pueden comprometerse en una nueva imagen y reutilizarse para crear más contenedores. No se requieren plantillas ni configuración manual.
La "configuración manual o de plantillas" es una referencia a LXC, donde necesitaría aprender sobre estas dos cosas. Docker le permite tratar los contenedores de la manera en que está acostumbrado a tratar las máquinas virtuales, sin conocer la configuración de LXC.
7) Shell interactivo : la ventana acoplable 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.
Acabo de empezar a aprender sobre LXC y Docker, por lo que agradecería cualquier corrección o mejor respuesta.
La publicación y las respuestas anteriores se están volviendo rápidamente obsoletas a medida que el desarrollo de LXD continúa mejorando el LXC . Sí, sé que Docker tampoco se ha detenido.
LXD ahora implementa un repositorio para imágenes de contenedor LXC que un usuario puede empujar / extraer para contribuir o reutilizar.
La API REST de LXD para LXC ahora permite la creación / implementación / gestión local y remota de contenedores LXC mediante una sintaxis de comandos 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 de cómputo)
- Intuitivo (API simple y clara y experiencia de línea de comandos nítida)
- Imagen basada (no más plantillas de distribución, solo buenas imágenes confiables) Migración en vivo
Hay un complemento de NCLXD ahora para OpenStack que permite que OpenStack utilice LXD para implementar / administrar contenedores LXC como máquinas virtuales en OpenStack en lugar de usar KVM, vmware, etc.
Sin embargo, NCLXD también habilita una nube híbrida de una combinación de máquinas virtuales de HW tradicionales y máquinas virtuales de LXC.
El complemento OpenStack nclxd, una lista de características compatibles, incluye:
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á nuevas características adicionales, como la compatibilidad con dispositivos de bloqueo y la migración en vivo .
Los estibadores usan imágenes que se construyen en capas. Esto agrega 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, como están en capas, los cambios en las versiones posteriores se agregan en forma de capas sobre las capas anteriores. Por lo tanto, si bien la migración muchas veces no es necesario trasladar las capas base. Los acopladores de carga tienen contenedores que ejecutan estas imágenes con un entorno de ejecución contenido, agregan cambios a medida que las nuevas capas brindan un fácil control de la versión.
Aparte de eso, Docker Hub es un buen registro con miles de imágenes públicas, donde puedes encontrar imágenes que tengan instalado el sistema operativo y otros softwares. Por lo tanto, puede obtener una ventaja bastante buena para su aplicación.
Yendo a mantener esto conciso, esto ya se ha preguntado y respondido anteriormente .
Sin embargo, retrocedía y respondía de manera ligeramente diferente, el propio motor de la ventana acoplable agrega la orquestación como uno de sus extras y esta es la parte disruptiva. Una vez que empiezas a ejecutar una aplicación como una combinación de contenedores que se ejecutan ''en algún lugar'' a través de múltiples motores de contenedores, se vuelve realmente emocionante. Robustez, escala horizontal, abstracción completa del hardware subyacente, podría seguir y seguir ...
No es solo Docker lo que le brinda esto, de hecho, el estándar de facto de Container Orchestration es Kubernetes, que viene en muchos sabores, uno Docker, sino también OpenShift, SuSe, Azure, AWS ...
Luego debajo de K8S hay motores de contenedores alternativos; los interesantes son Docker y CRIO, recientemente construidos, sin demonios, diseñados como un motor de contenedores específicamente para Kubernetes pero inmaduros. Es la competencia entre estos que creo que será la opción real a largo plazo para un motor de contenedor.