“Docker build --pull” un amacı nedir?


17

Bir docker görüntüsü oluştururken normalde kullanırsınız docker build ..

Ama belirtebildiğinizi buldum --pull, bu yüzden tüm komut şöyle görünecektidocker build --pull .

Amacından emin değilim --pull. Dockers resmi belgeleri "Her zaman görüntünün daha yeni bir sürümünü çekmeye çalışın" diyor ve bu bağlamda bunun ne anlama geldiğinden emin değilim.

Sen kullanmak docker buildyeni bir imaj yaratmak ve sonunda bir kap kayıt defterine yere yayımlamak. Neden henüz var olmayan bir şeyi çekmek istiyorsun?

Bunun web'de kolayca bulunabileceği gibi "basit" bir şey beklerdim, ama hiç kimse bununla benzer bir sorusu yok gibi görünüyor. Google'daki tek gerçek hit, (yukarıda belirtildiği gibi) anlamadığım Dockers resmi dokümanlarına atıfta bulunuyor.

Yardımın için teşekkürler!

Yanıtlar:


17

yerel olarak etiketlediğiniz her şeyi yeniden kullanmak yerine herhangi bir temel görüntünün en son sürümünü çeker

örneğin hareketli bir etikete (ör. ubuntu:bionic) dayalı bir resim alın . upstream bunu düzenli aralıklarla değiştirir ve yeniden oluşturur, ancak yerel olarak aylık bir resminiz olabilir. docker eski üsse karşı mutlu bir şekilde inşa edecek. --pullen son temel görüntüye karşı oluşturduğunuz için bir yan etki olarak

genellikle mümkün olan en kısa zamanda yukarı yönlü güvenlik düzeltmeleri almak için kullanmak için en iyi yöntemdir (eski, potansiyel olarak savunmasız görüntüleri kullanmak yerine). ancak değişiklikleri kırmak için ticaret yapmalısınız (ve değişmez etiketler kullanırsanız fark etmez)


Bu, ubuntu:bionicgörüntüyle ilgili çok iyi bir açıklamadır , çünkü açık bir şekilde eklenmiş bir sürümü yoktur, ancak yeni bir görüntü yayınladıklarında yine de farklı olacaktır. Her şey mantıklı. Teşekkürler!
Jim Aho

1
Temel görüntü, ubuntu:0.1.0örneğin yeni bir görüntü yayınladıysa, ancak aynı sürümde ise, yani ubuntu:0.1.0- bu docker build --pull, tüm yeni görüntüyü tekrar indireceği anlamına mı geliyor? (Sanırım çoğu insanın tercih ettiği şey bu olurdu)
Jim Aho

Birisinin @JimAho'dan son soruyu netleştireceğini umuyorum çünkü ben de daha iyi anlamak istiyorum. Görüntü daha yeni aktarılmışsa ve başka bir şey değişmemişse, yeniden oluşturulmaması durumu bu mudur?
learning2learn

2
@ learning2l cevabının evet olduğunu öğrenin, bir liman işçisi görüntüsünün etiketi sadece bir dizedir, bu yüzden "0.1.0" cevabının "biyonik" örneğinden farklı değildir
Anthony Sottile

@AnthonySottile Teşekkür ederim. çok fazla.
learning2learn

1

Basit cevap. docker buildyerel bir dockerfile dosyasından oluşturmak için kullanılır. docker pulldocker hub'ından çekmek için kullanılır. Bir docker dosyası olmadan docker yapısını kullanırsanız hata verir.

Belirttiğinizde --pullveya :latestdocker en yeni sürümü indirmeye çalıştığında (varsa)

Temel olarak, --pull eklerseniz, her çalıştırıldığında en yeni sürümü çekmeye çalışır.


Katmanlı görüntüleriniz varsa - hepsini her zaman çeker mi?
Jim Aho

Katmanlı görüntüleriniz varsa, bazıları makinede (eski katmanlar) önbelleğe alınır ve yeni katmanlar çekilir.
DuDoff

0

Docker,  --pull bayrağın  docker build, örn  docker build . --pull -t myimage. Yerel olarak bulunan sürüme rağmen yapının her zaman en son kapsayıcı görüntüsünü kullanmasını sağlamak için önerilen yol budur. Ancak bahsetmeye değer bir ek nokta:

Temel görüntünün güncellemeler için kontrol edilmesi de dahil olmak üzere yapınızın tamamen yeniden oluşturulduğundan emin olmak için, oluşturma sırasında aşağıdaki seçenekleri kullanın:

--no-cache - Bu, zaten mevcut olan katmanların yeniden oluşturulmasını zorlar.

Bu nedenle tam komut şöyle görünecektir:

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

Aynı seçenekler aşağıdakiler için de mevcuttur docker-compose:

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


Normal kullanımda ihtiyacınız olmamalıdır --no-cache. Temel görüntü güncellenirse (ve --pullyeni bir sürüm alırsa), önbelleği otomatik olarak geçersiz kılar; benzer şekilde COPYönbelleği geçersiz kılacak farklı bir kod. Bunun genellikle etkileyeceği tek şey, apt-get installağda barındırılan bir paket gibi bir şey yapıyorsanız , bu durumda --no-cachetemel görüntü güncellenmemiş olsa bile daha yeni bir sürümü kontrol etmesine neden olur.
David Maze
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.