Question Conteneur Docker OS: quelle est la différence avec une VM alors?


Quel est l'intérêt d'utiliser un système d'exploitation dans un conteneur de menu fixe?

Dans le référentiel de menu fixe, vous trouvez une image de menu fixe Ubuntu: https://registry.hub.docker.com/_/ubuntu/ Je pensais que Docker était plus au niveau "app".

Quelles sont alors les différences entre un conteneur de menu fixe Ubuntu et une machine virtuelle Ubuntu? Si vous avez un système d’exploitation complet dans un conteneur Docker, n’est-il pas inutile d’utiliser Docker?

Merci


10
2018-01-14 20:01


origine




Réponses:


Il vous manque des concepts de base de Docker. C'est une chose complètement différente.

La philosophie de Docker est la première chose à connaître: exécuter un processus isolé dans un conteneur. Vous n'exécuterez pas de système d'exploitation dans un conteneur Docker, vous exécuterez un processus dans un conteneur avec un contenu de système de fichiers racine basé sur une distribution Linux de votre choix. Ubuntu est un choix parmi d'autres.

Maintenant, vous devriez vous demander comment est-il possible d'obtenir un processus s'exécutant dans une image de base Linux différente de la distribution Linux que votre hôte exécute. Pour qu'un système d'exploitation fonctionne, il vous faut essentiellement:

  • Un système de fichiers de démarrage: contient le chargeur de démarrage et le noyau qui résideront en mémoire une fois chargés. Nous ne nous soucions pas de cela dans le cas des conteneurs Docker car le noyau est partagé avec l'hôte et constitue le point commun entre toutes les distributions Linux.
  • Un système de fichiers racine: contient la structure du système de fichiers. Cela peut être différent d’une distribution Linux à une autre. Il est en lecture seule jusqu'à la fin de la séquence de démarrage.

Docker utilise UnionFS pour gérer les couches de blocs de disque à l'intérieur d'un conteneur afin que vous puissiez les empiler.

En coulisse, il utilise un montage en union qui permet de monter plusieurs systèmes de fichiers en même temps, en apparaissant comme un système virtuel complet. En fait, il supprime la couche d'image de base en mode lecture-écriture par-dessus le système de fichiers racine de base en mode lecture seule.

Ici, vous avez une pile de blocs de disques superposés de manière à ce que la distribution linux d'où provient l'image de base contienne le même système de fichiers une fois installé sur un hôte réel, mais cette fois à l'intérieur d'un conteneur.

La dernière chose qui manque maintenant est: comment gérez-vous cette chose isolée?

La réponse est: espaces de noms. Je ne vais pas entrer dans les détails ici car cela s'écarterait un peu de la question initiale. Mais ce que vous devez savoir, c’est que depuis le noyau 2.4.19, divers espaces de noms sont apparus au fil des ans. Actuellement, les espaces de noms suivants sont disponibles:

  • IPC: espace de noms IPC (communications interprocessus)
  • MNT: espace de noms de montage
  • NET: espace de noms réseau
  • PID: espace de noms pid
  • USER: espace de nom d'utilisateur (uid)
  • UTS: espace de noms UTS (noms d'hôtes)

Les espaces de noms sont des structures isolées dans le noyau qui permettent aux processus de s'exécuter dans un environnement particulier. Par exemple, l’espace de noms MNT sera la fonctionnalité clé pour obtenir un processus s’exécutant dans les spécificités du système de fichiers racine de l’image de base. L'espace de noms NET constituera une autre caractéristique clé pour un conteneur afin de disposer d'interfaces réseau spécifiques lui permettant de communiquer avec le pont fixe, etc.

Donc, oui, l'objectif principal de tout cela est de lancer une application isolée, de l'expédier de votre environnement local à la production facilement, dans une boîte appelée conteneur.

Ce serait une bonne idée de lire documentation du docker avant de creuser plus loin dans elle.


11
2018-01-20 23:10



Merci, cela signifie-t-il qu'une image "Ubuntu" comme celle-ci: registry.hub.docker.com/_/ubuntu n'a aucun sens en soi et sert de base à un conteneur plus défini, comme un "conteneur nginx"? Je ne sais pas si j'ai du sens? - Michael
Oui vous faites. C'est exactement à quoi ça sert. Et généralement, vous entendrez des gens les appeler images de base Pour cette raison. - Xavier Lucas
J'ai parcouru la documentation et il y a une chose dont je ne suis pas sûr. Disons que la taille de l'image Ubuntu est de 140 Mo. Ensuite, une autre image basée sur cette image ajoute 10 Mo supplémentaires. Si je lance 2 conteneurs à partir de cette image, chaque conteneur aura-t-il une capacité de 150 Mo et-il besoin de 300 Mo d'espace disque OU la taille totale restera-t-elle de 150 Mo? Merci - Michael
Wow, je viens de télécharger l'image officielle en python et la taille virtuelle est de 802,4 Mo. Il a fallu un certain temps pour télécharger. Si je gère 10 conteneurs, combien d'espace les conteneurs vont-ils prendre? Merci - Michael
@YAmikep Certaines images peuvent être volumineuses à cause de dépendances mal nettoyées. Si vous démarrez 10 conteneurs avec la même image, cela ne signifie pas que l'espace disque utilisé sera 10 fois plus grand que la taille de l'image. Vous téléchargez une image une fois mais vous l'exécutez à partir de plusieurs conteneurs. Docker utilise la copie sur écriture lors de l’exécution de plusieurs conteneurs à partir de la même image, ce qui signifie qu’elle partagera l’image entre les conteneurs et créera une copie privée d’un fichier dans une image uniquement si le conteneur l’ajoute / la modifie. Ainsi, la taille réelle utilisée est liée à l'activité à l'intérieur des conteneurs et non au nombre d'exécutions. - Xavier Lucas