3
votes

Objectif de la commande FROM - fichier Docker

L'objectif principal du conteneur Docker est d'éviter de transporter le système d'exploitation invité dans chaque conteneur, comme indiqué ci-dessous.

 entrez la description de l'image ici Comme mentionné ici , l'instruction FROM s'initialise une nouvelle étape de construction et définit l'image de base pour les instructions suivantes. En tant que tel, un Dockerfile valide doit commencer avec une instruction FROM .

Je crois comprendre que FROM permet à un conteneur de s'exécuter sur son propre système d'exploitation.


Pourquoi un fichier Docker valide doit avoir l'instruction FROM ?


0 commentaires

3 Réponses :


2
votes

L'instruction FROM spécifie l'architecture du système d'exploitation sous-jacent que vous allez utiliser pour construire l'image. Vous devez utiliser une forme d'image de base pour commencer à créer une image. Cela peut être ubuntu, centos ou toute image Linux minimale comme ALPINE qui ne fait que 5 Mo !. L'idée est d'installer uniquement les packages dont vous avez besoin plutôt que de tout regrouper et emballer sous forme de distribution. Cela rend la taille des images du docker très petite par rapport à la distribution complète du système d'exploitation. J'espère que cela répond à votre question. Faites-moi savoir si vous avez des questions.


3 commentaires

"L'idée est d'installer uniquement les packages dont vous avez besoin plutôt que de tout regrouper et emballer sous forme de distribution." Que proposez-vous exactement? Si un conteneur a son propre noyau, alors pourquoi utiliserais-je un conteneur Docker?


"Si un conteneur a son propre noyau" - ce n'est pas le cas. Le noyau est partagé avec le système d'exploitation hôte.


Oui, comme ce que @Max a dit ci-dessus. Ici, le démon Docker gère votre noyau et la manière dont il utilise les ressources disponibles.



5
votes

Les conteneurs n'exécutent pas un système d'exploitation complet, ils partagent le noyau du système d'exploitation hôte (généralement, le noyau Linux). C'est la case "Système d'exploitation hôte" dans votre bonne image.

Ils fournissent cependant ce qu'on appelle «l'isolation de l'espace utilisateur» - en gros, cela signifie que chaque conteneur gère sa propre copie de la partie du système d'exploitation qui s'exécute en mode utilisateur - généralement, c'est une distribution Linux telle qu'Ubuntu. Dans votre image de droite, cela serait contenu dans la boîte "Bins / Libs".

Vous pouvez omettre la ligne FROM dans votre Dockerfile, ou utiliser FROM scratch , pour créer un image de base , puis ajoutez vous-même tous les éléments du mode utilisateur sur un noyau vide.


3 commentaires

Supposons que Windows soit le système d'exploitation hôte, si je lance le conteneur en disant FROM ubuntu dans Dockerfile, alors ces exécutables C (dites / bin / ls , / bin / grep < / code>) dans ce conteneur sont principalement des binaires basés sur Linux (ELF-64). Comment ces binaires (ELF-64) fonctionnent-ils avec l'OS hôte Windows (binaires au format COFF)? avec le démon docker au milieu


Si vous exécutez Docker pour Windows en mode conteneur Linux, il exécutera essentiellement une machine virtuelle Linux dans les coulisses. Tous vos conteneurs partagent le noyau Linux de cette machine virtuelle (pas le noyau Windows).


En fait, il semble que ce ne soit plus exact: hanselman.com/blog/… - non tout à fait sûr du fonctionnement exact du support natif des conteneurs Linux sur Windows, il pourrait être quelque peu similaire au sous-système Windows pour Linux.



0
votes

Une autre utilisation courante de FROM est d'enchaîner les builds pour former un build multi-étapes d'images plus petites.

Cela serait utile, par exemple, pour limiter les reconstructions redondantes lors d'échecs de compilation automatique.


0 commentaires