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:
- Despliegue 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 procesos, 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, de modo que el mismo contenedor de Docker puede ejecutarse, sin cambios, en muchas máquinas diferentes, con muchas configuraciones 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 Docker incluye capacidades similares a git para rastrear versiones sucesivas de un contenedor, inspeccionar la diferencia entre versiones, confirmar nuevas versiones, retroceder, etc. 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 utilizarlo 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 (Repositorios de imágenes de Docker) donde miles de personas han subido contenedores útiles: cualquier cosa, desde redis, couchdb, postgres hasta gorilas 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), tableros 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.
Una buena de Stack Overflow
- ¿Cómo calcula el tiempo necesario para escribir pruebas unitarias?
- ¿Qué computadora portátil (disponible en India) es la más adecuada para un ingeniero de software con un presupuesto de 50 mil rupias?
- ¿Cómo funcionan los rastreadores web desde el punto de vista técnico?
- ¿Has asistido a un campamento de desarrolladores de software en el último año? ¿Por qué estás extasiado o furioso por los resultados que logró para ti?
- ¿Cuáles (si las hay) son las desventajas de codificar / desarrollar profesionalmente?