À quoi sert «docker build --pull»?

17

Lorsque vous créez une image Docker que vous utilisez normalement docker build ..

Mais j'ai trouvé que vous pouvez spécifier --pull, donc toute la commande ressemblerait àdocker build --pull .

Je ne suis pas sûr de l'objectif de --pull. La documentation officielle de Dockers dit "Essayez toujours de tirer une version plus récente de l'image", et je ne sais pas ce que cela signifie dans ce contexte.

Vous utilisez docker buildpour créer une nouvelle image et éventuellement la publier quelque part dans un registre de conteneurs. Pourquoi voudriez-vous retirer quelque chose qui n'existe pas encore?

Je m'attendrais à ce que quelque chose d'aussi "simple" soit facilement trouvé sur le Web, mais personne ne semble avoir une question similaire à celle-ci. Le seul vrai succès sur Google se réfère aux documents officiels de Dockers, que je (comme indiqué ci-dessus) ne comprends pas.

Merci de votre aide!

Jim Aho
la source

Réponses:

17

il tirera la dernière version de toute image de base au lieu de réutiliser tout ce que vous avez déjà marqué localement

prenez par exemple une image basée sur une balise mobile (comme ubuntu:bionic). en amont apporte des modifications et reconstruit périodiquement mais vous pouvez avoir une image vieille d'un mois localement. docker sera heureux de construire contre l'ancienne base. --pulltirera comme un effet secondaire de sorte que vous construisez contre la dernière image de base

il est généralement recommandé de l'utiliser pour obtenir des correctifs de sécurité en amont dès que possible (au lieu d'utiliser des images périmées et potentiellement vulnérables). bien que vous deviez échanger des changements de rupture (et si vous utilisez des balises immuables, cela ne fait aucune différence)

Anthony Sottile
la source
Ceci est une très bonne explication avec l' ubuntu:bionicimage, car elle n'a (évidemment) pas de version attachée, mais sera toujours différente chaque fois qu'elle publiera une nouvelle image. Tout a du sens. Merci!
Jim Aho
1
Si l'image de base serait ubuntu:0.1.0par exemple, et ils ont publié une nouvelle image mais avec la même version, c'est ubuntu:0.1.0-à- dire - cela signifie- docker build --pullt-il de télécharger à nouveau la nouvelle image entière? (ce qui serait ce que la plupart des gens préfèrent, je suppose)
Jim Aho
J'espère que quelqu'un clarifiera la dernière question de @JimAho parce que c'est ce que je veux aussi mieux comprendre. Si l'image venait d'être poussée et que rien d'autre n'a changé, est-ce le cas qu'elle ne soit pas reconstruite?
learning2learn
2
@ learning2learn la réponse est oui, la balise d'une image docker n'est qu'une chaîne, donc "0.1.0" n'est pas différent de l'exemple de la réponse "bionique"
Anthony Sottile
@AnthonySottile Merci. beaucoup.
learning2learn
1

Réponse simple. docker buildest utilisé pour construire à partir d'un dockerfile local. docker pullest utilisé pour tirer du docker hub. Si vous utilisez la génération Docker sans fichier Docker, cela génère une erreur.

Lorsque vous spécifiez --pullou :latestdocker essaiera de télécharger la dernière version (le cas échéant)

Fondamentalement, si vous ajoutez --pull, il essaiera d'extraire la dernière version à chaque exécution.

DuDoff
la source
Si vous avez des images en couches, cela les tirera-t-il toujours ?
Jim Aho
Si vous avez des images en couches, certaines seront mises en cache sur la machine (anciennes couches) et les nouvelles couches seront extraites.
DuDoff
0

Docker permet de passer le  --pull drapeau  docker build, par exemple  docker build . --pull -t myimage. Il s'agit de la méthode recommandée pour garantir que la génération utilise toujours la dernière image de conteneur malgré la version disponible localement. Cependant, un point supplémentaire mérite d'être mentionné:

Pour vous assurer que votre build est complètement reconstruit, y compris la vérification de l'image de base pour les mises à jour, utilisez les options suivantes lors de la construction:

--no-cache - Cela forcera la reconstruction des couches déjà disponibles.

La commande complète ressemblera donc à ceci:

docker build . --pull --no-cache --tag myimage:version

Les mêmes options sont disponibles pour docker-compose:

docker-compose build --no-cache --pull

au revoir pour le moment
la source
En utilisation normale, vous ne devriez pas en avoir besoin --no-cache. Si l'image de base est mise à jour (et --pullobtient une nouvelle version) cela invalide automatiquement le cache; de même si vous COPYcode différent qui invalidera le cache. La seule chose que cela affectera généralement, c'est que si vous faites quelque chose comme apt-get installun package hébergé sur le réseau, auquel cas il le --no-cachefera rechercher une version plus récente même si l'image de base n'a pas été mise à jour.
David Maze