Réponses:
De la FAQ Docker :
Docker ne remplace pas lxc. "lxc" fait référence aux capacités du noyau Linux (en particulier les espaces de noms et les groupes de contrôle) qui permettent aux processus de sandboxing les uns des autres et de contrôler leurs allocations de ressources.
En plus de cette base de bas niveau des fonctionnalités du noyau, Docker propose un outil de haut niveau avec plusieurs fonctionnalités puissantes:
Déploiement portable sur plusieurs machines.Docker définit un format pour regrouper une application et toutes ses dépendances en un seul objet qui peut être transféré vers n'importe quelle machine compatible Docker et exécuté là-bas avec la garantie que l'environnement d'exécution exposé à l'application sera le même. Lxc implémente le sandboxing de processus, qui est une condition préalable importante pour un déploiement portable, mais cela ne suffit pas à lui seul pour un déploiement portable. Si vous m'envoyiez une copie de votre application installée dans une configuration lxc personnalisée, elle ne fonctionnerait certainement pas sur ma machine comme elle le fait sur la vôtre, car elle est liée à la configuration spécifique de votre machine: mise en réseau, stockage, journalisation, distribution, etc. Docker définit une abstraction pour ces paramètres spécifiques à la machine, afin que le même conteneur de docker puisse s'exécuter - inchangé - sur de nombreuses machines différentes,
Centré sur l'application. Docker est optimisé pour le déploiement d' applications , par opposition aux machines. Cela se reflète dans son API, son interface utilisateur, sa philosophie de conception et sa documentation. En revanche, les scripts d'assistance lxc se concentrent sur les conteneurs en tant que machines légères - essentiellement des serveurs qui démarrent plus rapidement et nécessitent moins de RAM. Nous pensons que les conteneurs ne se limitent pas à cela.
Construction automatique . Docker comprend un outil permettant aux développeurs d'assembler automatiquement un conteneur à partir de leur code source, avec un contrôle total sur les dépendances des applications, les outils de construction, le conditionnement, etc. Ils sont libres d'utiliser make, maven, chef, puppet, salt, debian packages, rpms, source tarballs, ou toute combinaison des éléments ci-dessus, quelle que soit la configuration des machines .
Versioning. Docker inclut des fonctionnalités de type git pour suivre les versions successives d'un conteneur, inspecter les différences entre les versions, valider de nouvelles versions, restaurer, etc. L'historique comprend également la façon dont un conteneur a été assemblé et par qui, de sorte que vous bénéficiez d'une traçabilité complète à partir du serveur de production tout le chemin du développeur en amont. Docker implémente également des téléchargements et téléchargements incrémentiels, similaires à "git pull", de sorte que les nouvelles versions d'un conteneur peuvent être transférées en envoyant uniquement des différences.
Réutilisation des composants. Tout conteneur peut être utilisé comme une "image de base" pour créer des composants plus spécialisés. Cela peut être fait manuellement ou dans le cadre d'une construction automatisée. Par exemple, vous pouvez préparer l'environnement python idéal et l'utiliser comme base pour 10 applications différentes. Votre configuration postgresql idéale peut être réutilisée pour tous vos futurs projets. Etc.
Partage. Docker a accès à un registre public ( https://registry.hub.docker.com/ ) où des milliers de personnes ont téléchargé des conteneurs utiles: tout, de redis, couchdb, postgres aux videurs irc aux rails des serveurs d'applications sur rails pour hadoop pour baser des images pour diverses distributions. Le registre comprend également une "bibliothèque standard" officielle de conteneurs utiles maintenue par l'équipe des dockers. Le registre lui-même est open-source, donc tout le monde peut déployer son propre registre pour stocker et transférer des conteneurs privés, pour les déploiements de serveurs internes par exemple.
Écosystème d'outils. Docker définit une API pour automatiser et personnaliser la création et le déploiement de conteneurs. Il existe un grand nombre d'outils intégrant avec docker pour étendre ses capacités. Déploiement de type PaaS (Dokku, Deis, Flynn), orchestration multi-nœuds (maestro, salt, mesos, openstack nova), tableaux de bord de gestion (docker-ui, openstack horizon, chantier naval), gestion de la configuration (chef, marionnette), intégration continue (jenkins, strider, travis), etc. Docker s'impose rapidement comme la norme pour l'outillage à base de conteneurs.
J'espère que ça aide!
Jetons un coup d'œil à la liste des fonctionnalités techniques de Docker et vérifions celles qui sont fournies par LXC et celles qui ne le sont pas.
1) Isolement du système de fichiers : chaque conteneur de processus s'exécute dans un système de fichiers racine complètement séparé.
Fourni avec LXC ordinaire.
2) Isolement des ressources : les ressources système comme le processeur et la mémoire peuvent être allouées différemment à chaque conteneur de processus, à l'aide de cgroups.
Fourni avec LXC ordinaire.
3) Isolement du réseau : chaque conteneur de processus s'exécute dans son propre espace de noms réseau, avec une interface virtuelle et une adresse IP qui lui sont propres.
Fourni avec LXC ordinaire.
4) Copie sur écriture : les systèmes de fichiers racine sont créés à l'aide de la copie sur écriture, ce qui rend le déploiement extrêmement rapide, peu coûteux en mémoire et peu coûteux en disque.
Ceci est fourni par AUFS, un système de fichiers union dont Docker dépend. Vous pouvez configurer manuellement AUFS avec LXC, mais Docker l'utilise comme standard.
5) Journalisation : les flux standard (stdout / stderr / stdin) de chaque conteneur de processus sont collectés et journalisés pour une récupération en temps réel ou par lots.
Docker fournit cela.
6) Gestion des modifications: les modifications apportées au système de fichiers d'un conteneur peuvent être validées dans une nouvelle image et réutilisées pour créer plus de conteneurs. Aucune configuration de modèle ou manuelle requise.
"Templating ou configuration manuelle" est une référence à LXC, où vous devez en savoir plus sur ces deux choses. Docker vous permet de traiter les conteneurs de la manière dont vous êtes habitué à traiter les machines virtuelles, sans avoir à connaître la configuration de LXC.
7) Shell interactif : le docker peut allouer un pseudo-tty et l'attacher à l'entrée standard de n'importe quel conteneur, par exemple pour exécuter un shell interactif jetable.
LXC fournit déjà cela.
Je viens juste de commencer à apprendre sur LXC et Docker, donc je serais heureux de recevoir des corrections ou de meilleures réponses.
unshare
outil de base (ou directement le clone()
syscall). De même, Docker rend ces choses plus faciles à utiliser (et apporte beaucoup plus de fonctionnalités sur la table, comme la possibilité de pousser / tirer des images). Mon 2c.
update-index
et read-tree
, sans outils familiers tels que add
, commit
et merge
. Docker fournit cette couche de "porcelaine" sur la "plomberie" de LXC, vous permettant de travailler avec des concepts de niveau supérieur et de vous soucier moins des détails de bas niveau.
Les articles et réponses ci-dessus deviennent rapidement obsolètes à mesure que le développement de LXD continue d'améliorer LXC . Oui, je sais que Docker n'est pas resté immobile non plus.
LXD implémente désormais un référentiel pour les images de conteneurs LXC à partir desquelles un utilisateur peut pousser / tirer pour contribuer ou réutiliser.
L'API REST de LXD vers LXC permet désormais la création / déploiement / gestion locale et à distance de conteneurs LXC à l'aide d'une syntaxe de commande très simple.
Les principales caractéristiques de LXD sont:
Il existe maintenant un plugin NCLXD pour OpenStack permettant à OpenStack d'utiliser LXD pour déployer / gérer des conteneurs LXC en tant que VM dans OpenStack au lieu d'utiliser KVM, vmware etc.
Cependant, NCLXD permet également un cloud hybride d'un mélange de machines virtuelles HW traditionnelles et de machines virtuelles LXC.
Le plugin OpenStack nclxd une liste de fonctionnalités prises en charge comprend:
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
Au moment de la sortie d'Ubuntu 16.04 en avril 2016, il y aura des fonctionnalités supplémentaires intéressantes telles que la prise en charge des périphériques de bloc, la prise en charge de la migration en direct .
Les dockers utilisent des images construites en couches. Cela ajoute beaucoup en termes de portabilité, de partage, de versioning et d'autres fonctionnalités. Ces images sont très faciles à porter ou à transférer et puisqu'elles sont en couches, les modifications dans les versions suivantes sont ajoutées sous forme de couches sur les couches précédentes. Ainsi, lors du portage plusieurs fois, vous n'avez pas besoin de porter les couches de base. Les dockers ont des conteneurs qui exécutent ces images avec un environnement d'exécution contenu, ils ajoutent des modifications en tant que nouvelles couches offrant un contrôle de version facile.
En dehors de cela, Docker Hub est un bon registre avec des milliers d'images publiques, où vous pouvez trouver des images sur lesquelles le système d'exploitation et d'autres logiciels sont installés. Ainsi, vous pouvez obtenir une assez bonne longueur d'avance pour votre application.
Va garder ce plus vif, c'est déjà demandé et répondu ci-dessus .
Je prendrais du recul cependant et y répondrais légèrement différemment, le moteur docker lui-même ajoute l'orchestration comme l'un de ses extras et c'est la partie perturbatrice. Une fois que vous commencez à exécuter une application en tant que combinaison de conteneurs exécutés «quelque part» sur plusieurs moteurs de conteneur, cela devient vraiment excitant. Robustesse, mise à l'échelle horizontale, abstraction complète du matériel sous-jacent, je pourrais continuer encore et encore ...
Ce n'est pas seulement Docker qui vous donne cela, en fait la norme de facto Container Orchestration est Kubernetes qui se décline en beaucoup de saveurs, une Docker, mais aussi OpenShift, SuSe, Azure, AWS ...
Ensuite, sous K8S, il existe d'autres moteurs de conteneurs; les plus intéressants sont Docker et CRIO - récemment construits, sans démon, destinés à être un moteur de conteneur spécifiquement pour Kubernetes mais immatures. C'est la concurrence entre ceux-ci qui, je pense, sera le véritable choix à long terme pour un moteur de conteneur.