Qual é o objetivo de "docker build --pull"?

17

Ao criar uma imagem de janela de encaixe, você normalmente usa docker build ..

Mas eu descobri que você pode especificar --pull, então todo o comando se pareceriadocker build --pull .

Não tenho certeza sobre o propósito de --pull. A documentação oficial do Dockers diz "Sempre tente extrair uma versão mais recente da imagem" e não tenho certeza do que isso significa nesse contexto.

Você usa docker buildpara criar uma nova imagem e, eventualmente, publicá-la em algum lugar no registro de um contêiner. Por que você deseja extrair algo que ainda não existe?

Eu esperaria que algo tão "simples" como esse fosse facilmente encontrado na web, mas ninguém parece ter uma pergunta semelhante a essa. O único sucesso real no google refere-se aos documentos oficiais do Dockers, que eu (como mencionado acima) não entendo.

Obrigado pela ajuda!

Jim Aho
fonte

Respostas:

17

ele puxará a versão mais recente de qualquer imagem de base, em vez de reutilizar o que você já tiver marcado localmente

por exemplo, uma imagem baseada em uma tag em movimento (como ubuntu:bionic). o upstream faz alterações e reconstrói isso periodicamente, mas você pode ter uma imagem com meses de idade localmente. o docker será feliz em construir contra a base antiga. --pullpuxará como um efeito colateral para que você construa contra a imagem base mais recente

geralmente é uma prática recomendada usá-lo para obter correções de segurança upstream o mais rápido possível (em vez de usar imagens obsoletas e potencialmente vulneráveis). embora você precise trocar as alterações mais recentes (e se você usar tags imutáveis, isso não fará diferença)

Anthony Sottile
fonte
Esta é uma explicação muito boa para a ubuntu:bionicimagem, pois ela (obviamente) não possui uma versão anexada, mas continuará sendo diferente sempre que publicar uma nova imagem. Tudo faz sentido. Obrigado!
Jim Aho
11
Se a imagem base fosse, ubuntu:0.1.0por exemplo, e eles publicassem uma nova imagem, mas com a mesma versão, isto é ubuntu:0.1.0- isso significa que você docker build --pullfará o download novamente da nova imagem inteira novamente? (que seria o que a maioria das pessoas prefere eu acho)
Jim Aho
Espero que alguém esclareça a última pergunta do @JimAho, porque é isso que quero entender melhor também. Se a imagem acabou de ser enviada e nada mais mudou, será que não será reconstruída?
learning2learn
2
@ learning2learn a resposta é sim, a tag de uma imagem do docker é apenas uma string, de modo que "0.1.0" não é diferente do exemplo da resposta "biônico"
Anthony Sottile
@AnthonySottile Obrigado. muitíssimo.
learning2learn
1

Resposta simples. docker buildé usado para construir a partir de um arquivo docker local. docker pullé usado para puxar do hub docker. Se você usar o docker build sem um arquivo, ele gera um erro.

Quando você especifica --pullou o :latestdocker tenta fazer o download da versão mais recente (se houver)

Basicamente, se você adicionar --pull, ele tentará extrair a versão mais nova sempre que for executada.

DuDoff
fonte
Se você tiver imagens em camadas - elas serão puxadas sempre ?
Jim Aho
Se você tiver imagens em camadas, algumas serão armazenadas em cache na máquina (camadas mais antigas) e quaisquer novas camadas serão puxadas.
DuDoff 22/10/19
0

O Docker permite passar a  --pull bandeira para  docker build, por exemplo  docker build . --pull -t myimage. Essa é a maneira recomendada de garantir que a compilação sempre use a imagem mais recente do contêiner, apesar da versão disponível localmente. No entanto, um ponto adicional vale a pena mencionar:

Para garantir que sua compilação seja totalmente reconstruída, incluindo a verificação de atualizações na imagem base, use as seguintes opções ao compilar:

--no-cache - Isso forçará a reconstrução de camadas já disponíveis.

O comando completo ficará assim:

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

As mesmas opções estão disponíveis para docker-compose:

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

até logo
fonte
Em uso normal, você não precisa --no-cache. Se a imagem base for atualizada (e --pullobtiver uma nova versão) que invalida automaticamente o cache; Da mesma forma, se você COPYcódigo diferente que invalidará o cache. A única coisa que isso normalmente afetará é se você estiver fazendo algo como apt-get installum pacote hospedado em rede, nesse caso, --no-cachefará com que ele verifique uma versão mais nova, mesmo que a imagem base não tenha sido atualizada.
David Maze