web-dev-qa-db-fra.com

Quel est le but du contexte de génération Docker?

Quel est le but du contexte de génération Docker? Je comprends, d'après la documentation, que c'est le point "d'entrée" à partir duquel tout le contenu sera envoyé au démon docker. Mais quel est l'intérêt d'envoyer le contenu entier du répertoire actuel, en supposant le cas d'utilisation par défaut fourni dans les exemples, quand nous devons également inclure explicitement une directive COPY ou ADD dans le Dockerfile pour inclure ACTUELLEMENT le contenu du répertoire actuel dans l'image générée ? Si le contexte est envoyé au démon pour être inclus dans l'image, alors pourquoi sommes-nous tenus de faire cette étape supplémentaire. Pourquoi la tâche de téléchargement/envoi/copie compressée n'inclut-elle pas le contenu du répertoire spécifié par défaut?

par exemple. Compte tenu de cette structure de répertoire

-rw-r--r--  1 me me    7 Jun  8 18:52 .dockerignore
-rw-r--r--  1 me me 1.1K Jun  9 12:42 Dockerfile
drwxr-xr-x 13 me me 4.0K Jun  8 19:43 myproject

Lorsque j'exécute cette commande docker build -t user/myproject: 2.3.

Ensuite, je m'attendrais à voir un répertoire myproject quelque part dans l'image générée. Mais, je DOIS inclure

 ADD myproject /

pour que ce soit le cas.

Si le processus de construction compresse le contenu du répertoire actuel et l'envoie au démon, où va-t-il? Pourquoi ne rend-il pas ce contenu disponible pour une utilisation dans l'image?

30
frogstarr78

TL; DR: "car le client et le démon peuvent même ne pas s'exécuter sur la même machine"

La commande docker est le client docker du dockerd qui est le service qui peut s'exécuter directement sur votre PC (linux) ou sous Linux VM sous OSX ou Windows.

Q: Quel est le but du contexte de construction Docker?

De ici :

Il serait probablement bon de mentionner également que cela doit se produire de cette façon parce que le client et le démon peuvent même ne pas fonctionner sur la même machine, donc sans ce "contexte", la machine démon n'aurait aucun autre moyen d'obtenir des fichiers pour ADD ou autrement


Q: Si le processus de construction compresse le contenu du répertoire actuel et l'envoie au démon, où va-t-il?

Le démon docker reçoit le répertoire compressé et le traite à la volée; peu importe où il est stocké à ce moment-là.

Q: Pourquoi ne rend-il pas ce contenu disponible pour une utilisation dans l'image?

Réfléchissez à ceci: Comment Docker peut-il savoir où vous souhaitez placer chaque fichier/répertoire dans l'image cible? Avec COPY/ADD directives que vous pouvez contrôler où les placer. Le cas que vous avez mentionné n'est qu'un exemple trivial où vous n'avez qu'un répertoire et une seule cible.

24
Robert