Orijinal soru: Dockerfile'da VOLUME talimatı nasıl kullanılır?
Çözmek istediğim asıl soru şu: ana bilgisayar birimlerini derleme sırasında Dockerfile'daki docker kaplarına nasıl bağlayacağımız, yani docker run -v /export:/export
yeteneği sırasında docker build
.
Bunun arkasındaki neden, benim için, Docker'da bir şeyler inşa ederken, bu ( apt-get install
) önbelleklerin tek bir liman işçisine kilitlenmesini istemiyorum , ancak onları paylaşma / yeniden kullanma. Bu soruyu sormamın ana nedeni bu.
Son Güncelleme:
Docker v18.09'dan önce, doğru cevap şu soru ile başlamalıdır:
Bir derleme sırasında bir birim monte etmenin bir yolu vardır, ancak Dockerfiles'ı içermez.
Ancak, bu kötü ifade edilmiş, organize ve desteklenmiş bir cevaptı. Docker içeriğimi yeniden yüklerken, aşağıdaki makaleye rastladım:
Uygun bir cacher-ng hizmetini dockerize
edin https://docs.docker.com/engine/examples/apt-cacher-ng/
Docker'in bu soruya çözümü doğrudan / dolaylı değil. Docker'ın yapmamızı önerdiği ortodoks bir yol. Ve burada sormaya çalıştığımdan daha iyi olduğunu itiraf ediyorum.
Başka bir yol, yeni kabul edilen cevap , örneğin v18.09'daki Buildkit.
Size uygun olanı seçin.
Oldu: Docker'dan olmayan bir çözüm - rocker vardı, ama şimdi rocker kesildi, cevabı tekrar "Mümkün değil" e geri döndürdüm .
Eski Güncelleme: Yani cevap "Mümkün değil". Sorunun https://github.com/docker/docker/issues/3156 adresinde yoğun bir şekilde tartışıldığını bildiğim için bunu bir cevap olarak kabul edebilirim . Taşınabilirliğin docker geliştiricisi için çok önemli bir sorun olduğunu anlayabilirim; ancak bir liman işçisi kullanıcı olarak, bu eksik özellik için çok hayal kırıklığına uğradığımı söylemeliyim. Tartışmamı yukarıda bahsi geçen tartışmadan bir alıntıyla kapatmama izin verin: " Gentoo'yu temel görüntü olarak kullanmak istiyorum, ancak görüntü oluşturulduktan sonra kesinlikle 1GB> Portage ağacı verilerinin katmanlardan herhangi birinde olmasını istemiyorum. yükleme sırasında devasa portage ağacının görünmemesi için kompakt bir konteynere sahip olabilir."Evet, ihtiyacım olanı indirmek için wget veya curl kullanabilirim, ancak sadece bir taşınabilirlik konusundaki düşüncenin beni her Gentoo temel imajı oluşturduğumda 1GB> Portage ağacını indirmeye zorlaması gerçeği ne verimli ne de kullanıcı dostu. Dahası, paket deposu HER ZAMAN / usr / portage altında OLACAK, bu nedenle DAİMA Gentoo altında TAŞINABİLİR Yine karara saygı duyuyorum, ama lütfen bu arada hayal kırıklığımı da ifade etmeme izin verin.
Ayrıntılarda orijinal soru :
itibaren
Dizinleri Ciltler Üzerinden Paylaşın
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
Veri hacimleri özelliğinin "Docker Remote API'sının 1. sürümünden beri kullanılabildiğini" söylüyor. Docker'ım 1.2.0 sürümü, ancak yukarıdaki makalede verilen örneği çalışmıyor:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Dockerfile'da, VOLUME komutu ile ana bilgisayara monte edilen birimleri docker kaplarına monte etmenin doğru yolu nedir?
$ apt-cache policy lxc-docker
lxc-docker:
Installed: 1.2.0
Candidate: 1.2.0
Version table:
*** 1.2.0 0
500 https://get.docker.io/ubuntu/ docker/main amd64 Packages
100 /var/lib/dpkg/status
$ cat Dockerfile
FROM debian:sid
VOLUME ["/export"]
RUN ls -l /export
CMD ls -l /export
$ docker build -t data .
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM debian:sid
---> 77e97a48ce6a
Step 1 : VOLUME ["/export"]
---> Using cache
---> 59b69b65a074
Step 2 : RUN ls -l /export
---> Running in df43c78d74be
total 0
---> 9d29a6eb263f
Removing intermediate container df43c78d74be
Step 3 : CMD ls -l /export
---> Running in 8e4916d3e390
---> d6e7e1c52551
Removing intermediate container 8e4916d3e390
Successfully built d6e7e1c52551
$ docker run data
total 0
$ ls -l /export | wc
20 162 1131
$ docker -v
Docker version 1.2.0, build fa7b24f
VOLUME ~/host_dir ~/container_dir
. Tartışma oldukça kapsamlı, bunun nedenini özetlemenin kısa bir yolu var mı?