Respuestas:
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 procesos de sandboxing entre sí y controlan sus asignaciones de recursos.
Además de esta base de bajo nivel de características del núcleo, Docker ofrece una herramienta de alto nivel con varias funcionalidades poderosas:
Implementación portátil en máquinas.Docker define un formato para agrupar una aplicación y todas sus dependencias en un solo objeto que se puede transferir a cualquier máquina con Docker y ejecutar allí con la garantía de que el entorno de ejecución expuesto a la aplicación será el mismo. Lxc implementa sandboxing de proceso, 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 envió 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, distribución, etc. Docker define una abstracción para estas configuraciones específicas de la máquina, para que el mismo contenedor de Docker pueda ejecutarse, sin cambios, en muchas máquinas diferentes,
Centrado en la aplicación. Docker está optimizado para el despliegue 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, las secuencias de comandos auxiliares lxc se centran en los contenedores como máquinas livianas, básicamente servidores que se inician 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 ensamblen automáticamente un contenedor a partir de su código fuente, con control total sobre las dependencias de la aplicación, herramientas de compilación, empaquetado, etc. Son libres de usar make, maven, chef, puppet, salt, debian paquetes, rpms, source tarballs, o cualquier combinación de lo anterior, independientemente de la configuración de las máquinas .
Versionado Acoplable incluye git-como capacidades para el seguimiento de las versiones sucesivas de un contenedor, inspeccionando el diff entre las versiones, la comisión de nuevas versiones, retroceder, etc. La historia también incluye cómo se monta un recipiente y por quién, para que pueda obtener una trazabilidad completa desde el servidor de producción todo el camino de regreso 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 solo enviando diferencias.
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 ideal de Python y usarlo como base para 10 aplicaciones diferentes. Su configuración ideal de postgresql se puede reutilizar para todos sus proyectos futuros. Y así.
Compartir 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, gorritos irc, rails, servidores de aplicaciones, hadoop o imágenes base para Varias distribuciones. El registro también incluye una "biblioteca estándar" oficial de contenedores útiles mantenidos por el equipo acoplable. 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. Hay una gran cantidad de herramientas que se integran con Docker para ampliar sus capacidades. Despliegue tipo PaaS (Dokku, Deis, Flynn), orquestación de múltiples nodos (maestro, salt, mesos, openstack nova), paneles de administración (docker-ui, openstack horizon, astillero), gestión de configuración (chef, marioneta), 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 verifiquemos cuáles son proporcionadas por LXC y cuáles no.
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 CPU y memoria se pueden asignar de manera diferente a cada contenedor de proceso, utilizando cgroups.
Provisto de LXC simple.
3) Aislamiento de la 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 usando copia en escritura, lo que hace que el despliegue sea extremadamente rápido, barato en memoria y en disco.
Esto lo proporciona AUFS, un sistema de archivos de unión del que Docker depende. Puede configurar AUFS usted mismo manualmente con LXC, pero Docker lo usa como estándar.
5) Registro : las secuencias estándar (stdout / stderr / stdin) de cada contenedor de proceso se recopilan y registran para la recuperación en lote o en tiempo real.
Docker proporciona esto.
6) Gestión de cambios: los cambios en el sistema de archivos de un contenedor pueden confirmarse en una nueva imagen y reutilizarse para crear más contenedores. No se requieren plantillas ni configuraciones manuales.
La "configuración de plantillas o manual" es una referencia a LXC, donde necesitaría aprender sobre estas dos cosas. Docker le permite tratar contenedores de la forma en que está acostumbrado a tratar máquinas virtuales, sin conocer 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 mejor respuesta.
unshare
herramienta básica (o directamente la clone()
llamada al sistema). Del mismo modo, Docker hace que esas cosas sean más fáciles de usar (y trae muchas más funciones sobre la mesa, como la capacidad de empujar / tirar imágenes). Mi 2c.
update-index
y read-tree
, sin necesidad de herramientas familiares como add
, commit
, y merge
. Docker proporciona esa capa de "porcelana" sobre la "tubería" de LXC, lo que le permite trabajar con conceptos de nivel superior y preocuparse menos por los detalles de bajo nivel.
La publicación y las respuestas anteriores se están volviendo rápidamente obsoletas a medida que el desarrollo de LXD continúa mejorando 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 / administración local y remota de contenedores LXC utilizando una sintaxis de comando muy simple.
Las características clave de LXD son:
Ahora hay 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 plugin OpenStack nclxd incluye una lista de características compatibles que incluyen:
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á funciones interesantes adicionales, como soporte para dispositivos de bloque, soporte para migración en vivo .
Los acopladores utilizan imágenes que se crean en capas. Esto agrega mucho en términos de portabilidad, uso compartido, 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 las versiones posteriores se agregan en forma de capas sobre las capas anteriores. Por lo tanto, al portar muchas veces no es necesario portar las capas base. Los Dockers tienen contenedores que ejecutan estas imágenes con un entorno de ejecución contenido, agregan cambios como nuevas capas que proporcionan un control de versión fácil.
Aparte de eso, Docker Hub es un buen registro con miles de imágenes públicas, donde puede encontrar imágenes que tienen instalado el SO y otros softwares. Por lo tanto, puede obtener una buena ventaja para su aplicación.
Para mantener esta pithier, esto ya se ha preguntado y respondido anteriormente .
Sin embargo, daría un paso atrás y respondería de manera un poco diferente, el motor de Docker agrega la orquestación como uno de sus extras y esta es la parte disruptiva. Una vez que comienza 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 te brinda esto, de hecho, el estándar de orquestación de contenedores de facto es Kubernetes, que viene en muchos sabores, uno Docker, pero también OpenShift, SuSe, Azure, AWS ...
Luego, debajo de K8S hay motores de contenedores alternativos; los más interesantes son Docker y CRIO, recientemente construido, sin demonios, pensado como un motor contenedor específicamente para Kubernetes pero inmaduro. Es la competencia entre estos lo que creo que será la elección real a largo plazo para un motor de contenedor.