¿Cuál es el propósito de "docker build --pull"?

17

Al construir una imagen acoplable que normalmente usa docker build ..

Pero he descubierto que puede especificar --pull, por lo que todo el comando se vería asídocker build --pull .

No estoy seguro sobre el propósito de --pull. La documentación oficial de Dockers dice "Siempre intente obtener una versión más nueva de la imagen", y no estoy seguro de lo que esto significa en este contexto.

Se utiliza docker buildpara crear una nueva imagen y, finalmente, publicarla en algún lugar en un registro de contenedor. ¿Por qué querrías sacar algo que aún no existe?

Esperaría que algo tan "simple" como esto se encuentre fácilmente en la web, pero nadie parece tener una pregunta similar a esta. El único éxito real en Google se refiere a los documentos oficiales de Dockers, que yo (como se indicó anteriormente) no entiendo.

¡Gracias por tu ayuda!

Jim Aho
fuente

Respuestas:

17

extraerá la última versión de cualquier imagen base en lugar de reutilizar lo que ya haya etiquetado localmente

tome, por ejemplo, una imagen basada en una etiqueta en movimiento (como ubuntu:bionic). Upstream realiza cambios y reconstruye esto periódicamente, pero es posible que tenga una imagen local de varios meses. Docker felizmente construirá contra la vieja base. --pullaparecerá como un efecto secundario para que construyas contra la última imagen base

Por lo general, es una buena práctica usarlo para obtener soluciones de seguridad anteriores tan pronto como sea posible (en lugar de usar imágenes obsoletas y potencialmente vulnerables). aunque tiene que cambiar los cambios de última hora (y si usa etiquetas inmutables, no hay diferencia)

Anthony Sottile
fuente
Esta es una muy buena explicación con la ubuntu:bionicimagen, ya que (obviamente) no tiene una versión adjunta, pero seguirá siendo diferente cada vez que publiquen una nueva imagen. Todo tiene sentido. ¡Gracias!
Jim Aho
1
Si la imagen base fuera, ubuntu:0.1.0por ejemplo, y publicaran una nueva imagen pero con la misma versión, es decir ubuntu:0.1.0, ¿significa docker build --pullque volverá a descargar toda la nueva imagen nuevamente? (que sería lo que la mayoría de la gente prefería, supongo)
Jim Aho
Espero que alguien aclare la última pregunta de @JimAho porque eso es lo que quiero entender mejor también. Si la imagen acaba de ser empujada, y nada más ha cambiado, ¿es el caso de que no se haya reconstruido?
learning2learn
2
@ learning2learn la respuesta es sí, la etiqueta de una imagen acoplable es solo una cadena, por lo que "0.1.0" no es diferente del ejemplo en la respuesta "biónica"
Anthony Sottile
@AnthonySottile Gracias. mucho.
learning2learn
1

Respuesta simple docker buildse usa para construir desde un dockerfile local. docker pullse utiliza para extraer del docker hub. Si usa Docker Build sin un archivo Docker, arroja un error.

Cuando especifique --pullo :latestDocker intentará descargar la versión más reciente (si la hay)

Básicamente, si agrega --pull, intentará extraer la versión más nueva cada vez que se ejecute.

DuDoff
fuente
Si tiene imágenes en capas, ¿las extraerá siempre ?
Jim Aho
Si tiene imágenes en capas, algunas se almacenarán en caché en la máquina (capas más antiguas) y se extraerán las capas nuevas.
DuDoff
0

Docker permite pasar la  --pull bandera a  docker build, por ejemplo  docker build . --pull -t myimage. Esta es la forma recomendada de garantizar que la compilación siempre use la última imagen del contenedor a pesar de la versión disponible localmente. Sin embargo, un punto adicional que vale la pena mencionar:

Para asegurarse de que su compilación se reconstruya por completo, incluida la comprobación de actualizaciones de la imagen base, use las siguientes opciones al compilar:

--no-cache - Esto forzará la reconstrucción de las capas ya disponibles.

El comando completo se verá así:

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

Las mismas opciones están disponibles para docker-compose:

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

adiós por ahora
fuente
En uso normal no debería necesitar --no-cache. Si la imagen base se actualiza (y --pullobtiene una nueva versión) que invalida automáticamente el caché; de manera similar si usa COPYun código diferente que invalidará el caché. Lo único que esto generalmente afectará es si está haciendo algo así como apt-get installun paquete alojado en la red, en cuyo caso --no-cachehará que busque una versión más nueva, incluso si la imagen base no se ha actualizado.
David Maze