Qual è lo scopo di "docker build --pull"?


17

Quando si crea un'immagine docker normalmente utilizzata docker build ..

Ma ho scoperto che puoi specificare --pull, quindi l'intero comando sarebbe similedocker build --pull .

Non sono sicuro dello scopo di --pull. La documentazione ufficiale di Dockers dice "Cerca sempre di estrarre una versione più recente dell'immagine" e non sono sicuro di cosa significhi in questo contesto.

Si utilizza docker buildper creare una nuova immagine e infine pubblicarla da qualche parte in un registro contenitore. Perché vorresti estrarre qualcosa che non esiste ancora?

Mi aspetterei che qualcosa di così "semplice" sia facilmente reperibile sul web, ma nessuno sembra avere una domanda simile a questa. L'unico vero successo su Google si riferisce ai documenti ufficiali di Dockers, che io (come detto sopra) non capisco.

Grazie per l'aiuto!

Risposte:


17

estrarrà la versione più recente di qualsiasi immagine di base anziché riutilizzare tutto ciò che è già stato taggato localmente

prendi ad esempio un'immagine basata su un tag in movimento (come ubuntu:bionic). upstream apporta periodicamente modifiche e ricostruzioni, ma potresti avere un'immagine locale di mesi. il docker costruirà felicemente contro la vecchia base. --pullverrà utilizzato come effetto collaterale in modo da creare un'immagine di base più recente

di solito è una buona pratica usarlo per ottenere correzioni di sicurezza a monte il più presto possibile (invece di usare immagini stantie, potenzialmente vulnerabili). anche se devi compensare le modifiche (e se usi tag immutabili, allora non fa differenza)


Questa è un'ottima spiegazione con l' ubuntu:bionicimmagine, dal momento che (ovviamente) non ha una versione allegata, ma sarà comunque diversa ogni volta che pubblicheranno una nuova immagine. Tutto ha un senso. Grazie!
Jim Aho,

1
Se l'immagine di base fosse ubuntu:0.1.0per esempio, e pubblicassero una nuova immagine ma con la stessa versione cioè ubuntu:0.1.0- significa docker build --pullche scaricheranno di nuovo l'intera nuova immagine? (che sarebbe quello che la maggior parte delle persone preferisce immagino)
Jim Aho,

Spero che qualcuno chiarisca l'ultima domanda di @JimAho perché è quello che voglio capire anche meglio. Se l'immagine è stata appena inserita e non è cambiato nient'altro, è possibile che non sia stata ricostruita?
learning2learn

2
@ learning2learn la risposta è sì, il tag di un'immagine docker è solo una stringa, quindi "0.1.0" non è diverso dall'esempio nella risposta "bionic"
Anthony Sottile

@AnthonySottile Grazie. molto.
learning2learn

1

Semplice risposta. docker buildviene utilizzato per compilare da un file docker locale.docker pullviene utilizzato per estrarre dall'hub docker. Se usi la finestra mobile senza un file finestra mobile genera un errore.

Quando si specifica --pullo:latest finestra mobile tenterà di scaricare la versione più recente (se presente)

Fondamentalmente, se aggiungi --pull, proverà a estrarre la versione più recente ogni volta che viene eseguito.


Se hai immagini a strati - le tirerà sempre tutte ?
Jim Aho,

Se si dispone di immagini a più livelli, alcune verranno memorizzate nella cache della macchina (livelli precedenti) e qualsiasi nuovo livello verrà estratto.
DuDoff,

0

Docker consente di passare la  --pull bandiera  docker build, ad es  docker build . --pull -t myimage. Questo è il modo consigliato per assicurarsi che la build utilizzi sempre l'immagine contenitore più recente nonostante la versione disponibile localmente. Tuttavia, vale la pena menzionare un ulteriore punto:

Per assicurarti che la tua build sia completamente ricostruita, incluso il controllo dell'immagine di base per gli aggiornamenti, usa le seguenti opzioni durante la compilazione:

--no-cache - Questo costringerà la ricostruzione di livelli già disponibili.

Il comando completo sarà quindi simile al seguente:

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

Le stesse opzioni sono disponibili per docker-compose:

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


Nell'uso normale non dovresti aver bisogno --no-cache. Se l'immagine di base viene aggiornata (e --pullottiene una nuova versione) che invalida automaticamente la cache; allo stesso modo se hai COPYun codice diverso che invaliderà la cache. L'unica cosa che di solito influirà è se stai facendo qualcosa di simile a apt-get installun pacchetto ospitato in rete, nel qual caso --no-cacheprovocherà la verifica di una versione più recente anche se l'immagine di base non è stata aggiornata.
David Maze,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.