Qu’est-ce que Docker ajoute aux outils lxc (les outils LXC de l’espace utilisateur)?

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 devrais-je utiliser Docker sur du LXC ordinaire?

De la FAQ Docker :

Docker ne remplace pas lxc. “lxc” fait référence aux capacités du kernel Linux (en particulier les espaces de noms et les groupes de contrôle) qui permettent les processus de sandboxing les uns des autres et contrôlent leurs allocations de ressources.

En plus de la base de bas niveau des fonctionnalités du kernel, Docker propose un outil de haut niveau avec plusieurs fonctionnalités puissantes:

  • Déploiement portable sur plusieurs machines. Docker définit un format permettant de regrouper une application et toutes ses dépendances dans un object unique pouvant être transféré sur une machine compatible avec docker et exécuté 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 le déploiement portable, mais cela ne suffit pas pour un déploiement portable. Si vous m’avez envoyé une copie de votre application installée dans une configuration lxc personnalisée, elle ne sera probablement pas exécutée sur ma machine comme sur la vôtre, car elle est liée à la configuration spécifique de votre machine: mise en réseau, stockage, journalisation, dissortingbution, etc. Docker définit une abstraction pour ces parameters spécifiques à la machine, de sorte que le même conteneur Docker puisse s’exécuter – sans modification – sur de nombreuses machines différentes, avec de nombreuses configurations différentes.

  • Centré sur les applications 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 création, le packaging, etc. Ils peuvent utiliser les packages make, maven, chef, marionnette, salt, debian, rpms, source. tarballs, ou toute combinaison de ce qui précède, quelle que soit la configuration des machines .

  • Contrôle de version Docker inclut des fonctionnalités de type git pour le suivi des versions successives d’un conteneur, l’inspection des différences entre les versions, la validation de nouvelles versions, l’annulation, etc. L’historique inclut également l’assemblage d’un conteneur et sa traçabilité complète. tout le chemin du développeur en amont. Docker implémente également des téléchargements et des téléchargements incrémentiels, similaires à “git pull”, afin que les nouvelles versions d’un conteneur puissent être transférées en envoyant uniquement des diffs.

  • 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 génération 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. Etc.

  • Partage. Docker a access à un registre public ( https://registry.hub.docker.com/ ) où des milliers de personnes ont téléchargé des conteneurs utiles: de redis, couchdb, postgres aux irc bouncers, en passant par les rails, les serveurs d’application et les images de base. diverses dissortingbutions. Le registre comprend également une “bibliothèque standard” officielle de conteneurs utiles maintenue par l’équipe de docker. Le registre lui-même étant open-source, toute personne peut déployer son propre registre pour stocker et transférer des conteneurs privés, par exemple pour des déploiements de serveurs internes.

  • Écosystème de l’outil. Docker définit une API pour automatiser et personnaliser la création et le déploiement des conteneurs. Il existe un grand nombre d’outils intégrant 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 configuration (chef, marionnette), continuous integration (jenkins, ssortingder, 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’oeil à la liste des caractéristiques techniques de Docker et vérifions celles qui sont fournies par LXC et celles qui ne le sont pas.

Caractéristiques:

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 du LXC ordinaire.

2) Isolement des ressources : les ressources système telles que le processeur et la mémoire peuvent être affectées différemment à chaque conteneur de processus, à l’aide de groupes de contrôle.

Fourni avec du LXC ordinaire.

3) Isolement du réseau : chaque conteneur de processus s’exécute dans son propre espace de nom de réseau, avec une interface virtuelle et une adresse IP propres.

Fourni avec du LXC ordinaire.

4) Copy-on-write : les systèmes de fichiers racine sont créés à l’aide de la méthode copy-on-write, ce qui rend le déploiement extrêmement rapide, économique et bon marché.

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

5) Journalisation : les stream standard (stdout / stderr / stdin) de chaque conteneur de processus sont collectés et consignés pour une récupération en temps réel ou par lots.

Docker fournit ceci.

6) Gestion des modifications: les modifications apscopes au système de fichiers d’un conteneur peuvent être validées dans une nouvelle image et réutilisées pour créer d’autres conteneurs. Aucune configuration manuelle ou manuelle requirejse.

“Templating ou configuration manuelle” est une référence à LXC, où vous devez apprendre ces deux choses. Docker vous permet de traiter les conteneurs de la manière dont vous avez l’habitude de traiter les machines virtuelles, sans vous familiariser avec la configuration LXC.

7) Shell interactif : Docker peut allouer une pseudo-tty et l’attacher à l’entrée standard de n’importe quel conteneur, par exemple pour exécuter un shell interactif jetable.

LXC le fournit déjà.


Je viens juste de commencer à apprendre à propos de LXC et de Docker, alors je me réjouirais de toutes les corrections ou de meilleures réponses.

Le post et les 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 ne s’est pas arrêté non plus.

LXD implémente désormais un référentiel pour les images de conteneur LXC qu’un utilisateur peut tirer / tirer pour consortingbuer ou réutiliser.

L’API REST de LXD vers LXC permet désormais la création / le déploiement / la gestion à la fois de conteneurs LXC à la fois locaux et distants, à l’ aide d’une syntaxe de commande très simple.

Les principales caractéristiques de LXD sont:

  • Sécurisé par la conception (conteneurs non privilégiés, ressortingctions de ressources et bien plus encore)
  • Scalable (des conteneurs sur votre ordinateur portable aux milliers de nœuds de calcul)
  • Intuitif (API simple et claire et expérience en ligne de commande nette)
  • Image basée (plus de modèles de dissortingbution, seulement des images de qualité et fiables) Migration en direct

Il existe maintenant le plug-in NCLXD pour OpenStack, ce qui permet à 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 composé d’un mélange de VM HW traditionnelles et de VM LXC.

Le plug-in OpenStack nclxd, une liste de fonctionnalités sockets en charge incluent:

 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 où Ubuntu 16.04 sera publié en avril 2016, il y aura d’ autres fonctionnalités intéressantes, telles que la prise en charge des périphériques en mode bloc, la prise en charge de la migration en direct .

Les dockers utilisent des images qui sont créées en couches. Cela ajoute beaucoup en termes de portabilité, de partage, de gestion des versions et d’autres fonctionnalités. Ces images sont très faciles à transférer ou à transférer et, étant donné qu’elles sont en couches, les modifications apscopes aux versions suivantes sont ajoutées sous forme de calques sur les calques précédents. Ainsi, lorsque vous portez 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 nouveaux calques facilitant le contrôle des versions.

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. Donc, vous pouvez obtenir une bonne longueur d’avance pour votre application.

En allant garder cette tête, c’est déjà demandé et répondu ci-dessus .

Je reculerais cependant et répondrais un peu différemment, le moteur de docker lui-même ajoute l’orchestration comme l’un de ses extras et c’est la partie perturbasortingce. Une fois que vous commencez à exécuter une application en tant que combinaison de conteneurs exécutant «quelque part» sur plusieurs moteurs de conteneurs, 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 offre cette fonctionnalité, en fait la norme de facto Container Orchestration est Kubernetes qui se décline en de nombreuses variantes, une version Docker, mais aussi OpenShift, SuSe, Azure, AWS …

Ensuite, sous K8S, il existe des moteurs de conteneurs alternatifs; les plus intéressants sont Docker et CRIO – récemment construits, sans démon, conçus comme un moteur de conteneur spécifiquement pour Kubernetes mais immatures. Je pense que la concurrence entre ceux-ci sera le véritable choix à long terme pour un moteur de conteneur.