Qu'est-ce que Docker ajoute à LXC-tools (les userspace LXC tools)?

si vous regardez les fonctionnalités de Docker, la plupart d'entre elles sont déjà fournies par LXC.

alors Qu'est-ce que Docker ajoute? Pourquoi utiliser Docker plutôt que LXC?

372
demandé sur Jacek Laskowski 2013-08-01 12:50:42

5 réponses

From the Docker FAQ :

Docker n'est pas un remplacement pour lxc. "lxc" se réfère aux capacités du noyau linux (en particulier les namespaces et les groupes de contrôle) qui permettent les processus de sandboxing les uns des autres, et de contrôler leurs allocations de ressources.

en plus de cette base de bas niveau de fonctionnalités du noyau, Docker offre un outil de haut niveau avec plusieurs fonctionnalités puissantes:

  • Portable déploiement sur des machines. Docker définit un format pour regrouper une application et toutes ses dépendances en un seul objet qui peut être transféré à n'importe quelle machine compatible avec docker, et exécuté avec la garantie que l'environnement d'exécution exposé à l'application sera le même. Lxc met en œuvre le procédé sandboxing, qui est un pré-requis important pour un déploiement portable, mais qui ne suffit pas à lui seul pour déploiement. Si vous m'avez envoyé 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: réseau, stockage, journalisation, distro, etc. Docker définit une abstraction pour ces réglages spécifiques à la machine, de sorte que le même conteneur docker peut fonctionner - sans changement - sur de nombreuses machines différentes, avec de nombreuses configurations différentes.

  • centrée sur les Applications. Docker est optimisé pour le déploiement de applications , par opposition à des machines. Cela se reflète dans son API, son interface utilisateur, sa philosophie de conception et sa documentation. En revanche, les scripts LXC helper 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 qu'il ya plus de conteneurs que cela.

  • Automatique . Docker inclut 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 d'application, les outils de construction, l'emballage, etc. Ils sont libres d'utiliser les paquets make, maven, chef, puppet, salt, debian, rpms, source tarballs, ou toute combinaison des ci-dessus, quelle que soit la configuration des machines .

  • la gestion des versions. Docker inclut des capacités de type git pour suivre les versions successives d'un conteneur, inspecter la différence entre les versions, commettre de nouvelles versions, revenir en arrière, etc. L'histoire comprend également comment un conteneur a été assemblé et par qui, de sorte que vous obtenez une traçabilité complète du serveur de production tout le chemin vers le développeur en amont. Docker implémente également des téléchargements incrémentiels et des téléchargements, similaire à "git pull", donc Nouveau les versions d'un conteneur peuvent être transférées uniquement par l'envoi de diffs.

  • de réutilisation des Composants. tout conteneur peut être utilisé comme "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 projets futurs. Et ainsi de sur.

  • "1519110920 de 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: n'importe quoi de redis, couchdb, postgres à irc bouncers à rails app servers à hadoop à base d'images pour diverses distros. Le registre comprend également une "bibliothèque standard" officielle de conteneurs utiles gérée par l'équipe docker. Registre elle - même est open-source, de sorte que n'importe qui peut déployer son propre Registre pour stocker et transférer des conteneurs privés, pour des déploiements internes de serveur par exemple.

  • Outil de l'écosystème. Docker définit une API pour automatiser et personnaliser la création et le déploiement de conteneurs. Il y a un grand nombre d'outils qui s'intègrent avec docker pour étendre ses capacités. Déploiement de type PaaS( Dokku, Deis, Flynn), orchestration multi-noeuds (Maestro, salt, mesos, openstack nova), tableaux de bord de gestion (docker-ui, openstack horizon, shipyard), gestion de la configuration (chef, puppet), intégration continue (jenkins, strider, travis), etc. Docker s'impose rapidement comme la norme en matière d'outillage à base de conteneurs.

j'espère que cela aide!

528
répondu Solomon Hykes 2016-07-23 18:59:27

jetons un coup d'oeil à la liste des caractéristiques techniques de Docker , et de vérifier ceux qui sont fournis par LXC et ceux qui ne sont pas.

Dispose:

1) isolation du système de fichiers : chaque conteneur de processus fonctionne dans un système de fichiers racine complètement séparé.

fourni avec LXC Uni.

2) Isolation de la ressource : les ressources du système comme le cpu et la mémoire peuvent être affectées différemment à chaque conteneur de processus, en utilisant des cgroups.

fourni avec LXC Uni.

3) isolation de réseau : chaque conteneur de processus fonctionne dans son propre espace réseau, avec une interface virtuelle et une adresse IP propres.

fourni avec LXC Uni.

4) Copy-on-write : les systèmes de fichiers racine sont créés en utilisant copy-on-write, ce qui rend le déploiement extrêmement rapide, Mémoire-Pas Cher et DISQUE-pas cher.

Ceci est fourni par AUFS, un système de fichiers de l'union dont dépend Docker. Vous pouvez configurer vous-même AUFS manuellement avec LXC, mais Docker l'utilise comme standard.

5) Journalisation : le flux standard (stdout/stderr / stdin) de chaque conteneur de processus est collecté et enregistré pour la récupération en temps réel ou par lots.

Docker fournit ceci.

6) Change management : les modifications du système de fichiers d'un conteneur peuvent être intégrées dans une nouvelle image et réutilisées pour créer plus de conteneurs. Aucune configuration de Template ou manuelle n'est requise.

"création de modèles ou de configuration manuelle" est une référence à LXC, où vous auriez besoin d'apprendre sur ces deux choses. Docker vous permet de traiter les conteneurs de la manière dont vous êtes habitué au traitement des machines virtuelles, sans apprendre la configuration LXC.

7) shell interactif : docker peut allouer un pseudo-tty et se fixer à l'entrée standard de n'importe quel conteneur, par exemple pour exécuter un shell interactif à distance.

LXC déjà fournit cette.


je viens tout juste de commencer à apprendre au sujet de LXC et Docker, donc je serais heureux d'apporter des corrections ou de meilleures réponses.

66
répondu Flimm 2013-08-01 08:50:42

Le post ci-dessus et réponses sont rapidement en train de devenir datée du développement de la 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 conteneur LXC qu'un utilisateur peut push/pull à partir duquel il peut contribuer ou réutiliser.

l'api REST de LXD à LXC permet désormais à la fois la création locale et à distance création/déploiement / gestion de conteneurs LXC en utilisant une syntaxe de commande très simple.

caractéristiques clés de LXD sont:

  • sécuritaire de par sa conception (contenants non privilégiés, restrictions relatives aux ressources et beaucoup plus)
  • évolutif (de conteneurs sur votre ordinateur portable à mille de calcul noeuds)
  • "1519140920 Intuitif" (simple, clair, de l'API et le croustillant de la ligne de commande de l'expérience)
  • basé sur L'Image (plus de modèles de distribution, seulement bon, fiable image) Migration des vivants

il y a nclxd plugin maintenant pour OpenStack permettant à OpenStack d'utiliser LXD pour déployer/gérer les conteneurs LXC comme VMs dans OpenStack au lieu d'utiliser KVM, vmware etc.

cependant, NCLXD permet également un nuage hybride d'un mélange de vm HW traditionnelles et de vm LXC.

le plugin OpenStack nclxd une liste des 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

par lors de la sortie D'Ubuntu 16.04 en avril 2016, il y aura eu des fonctionnalités cool supplémentaires telles que la prise en charge des périphériques de bloc, la prise en charge de la migration en direct .

12
répondu bmullan 2015-12-19 14:35:01

Dockers utilisent des images qui sont construites en couches. Cela ajoute beaucoup en termes de portabilité, partage, versioning et d'autres fonctionnalités. Ces images sont très faciles à porter ou à transférer et puisqu'elles sont en couches, les changements dans les versions suivantes sont ajoutés sous forme de couches sur les couches précédentes. Ainsi, tout en portant plusieurs fois, vous n'avez pas besoin de porter les couches de base. Les Dockers ont des conteneurs qui exécutent ces images avec l'environnement d'exécution contenu, ils ajoutent des changements que de nouvelles couches fournissant contrôle de version facile.

en dehors de ce Hub Docker est un bon registre avec des milliers d'images publiques, où vous pouvez trouver des images qui ont OS et d'autres logiciels installés. Donc, vous pouvez avoir un bon départ pour votre application.

3
répondu div 2015-05-29 08:07:44

va garder ce pithier, cela est déjà demandé et répondu au-dessus de .

Je reculerais cependant et y répondrais légèrement différemment, le moteur docker lui-même ajoute orchestration comme l'un de ses extras et c'est la partie perturbatrice. Une fois que vous commencez à exécuter une application comme une combinaison de conteneurs tournant "quelque part" à travers plusieurs moteurs de conteneurs, il devient vraiment passionnant. Robustesse, mise à L'échelle horizontale, abstraction complète de la le matériel sous-jacent, je pourrais continuer encore et encore...

ce N'est pas seulement Docker qui vous donne cela, en fait le standard D'Orchestration de Container de facto est Kubernetes qui vient dans beaucoup de saveurs, un Docker un, mais aussi OpenShift, SuSe, Azur, AWS...

puis sous K8S il y a des moteurs de conteneurs alternatifs; les intéressants sont Docker et CRIO-récemment construit, daemonless, destiné comme un moteur de conteneurs spécifiquement pour Kubernetes mais immature. C'est la concurrence entre ceux-ci que je pense sera le vrai choix à long terme pour un moteur de conteneur.

0
répondu Will Rothwell 2018-06-29 09:16:52