Pertanyaan awal: Bagaimana cara menggunakan instruksi VOLUME di Dockerfile?
Pertanyaan sebenarnya yang ingin saya pecahkan adalah - bagaimana cara me-mount volume host ke dalam wadah buruh pelabuhan di Dockerfile selama pembuatan, yaitu, memiliki docker run -v /export:/export
kemampuan selama docker build
.
Alasan di baliknya, bagi saya, adalah ketika membangun sesuatu di Docker, saya tidak ingin apt-get install
cache ( ) itu terkunci di satu buruh pelabuhan, tetapi untuk membagikan / menggunakannya kembali. Itulah alasan utama saya bertanya tentang pertanyaan ini.
Pembaruan Terbaru:
Sebelum docker v18.09, jawaban yang benar haruslah yang dimulai dengan:
Ada cara untuk memasang volume selama membangun, tetapi tidak melibatkan Dockerfiles.
Namun, itu adalah jawaban yang dinyatakan dengan buruk, terorganisir dan didukung. Ketika saya sedang menginstal ulang buruh pelabuhan saya, saya kebetulan menemukan artikel berikut:
Dockerize layanan apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
Itulah solusi buruh pelabuhan untuk pertanyaan ini / saya, tidak secara langsung tetapi tidak langsung. Ini adalah cara buruh pelabuhan ortodoks menyarankan kita untuk melakukan. Dan saya akui itu lebih baik daripada yang saya coba tanyakan di sini.
Cara lain adalah, jawaban yang baru diterima , misalnya, Buildkit di v18.09.
Pilih mana yang cocok untuk Anda.
Was: Ada solusi - rocker, yang bukan dari Docker, tetapi sekarang rocker dihentikan, saya mengembalikan jawaban kembali ke "Tidak mungkin" lagi.
Pembaruan Lama: Jadi jawabannya adalah "Tidak mungkin". Saya dapat menerimanya sebagai jawaban karena saya tahu masalah ini telah dibahas secara luas di https://github.com/docker/docker/issues/3156 . Saya bisa mengerti bahwa portabilitas adalah masalah terpenting bagi pengembang buruh pelabuhan; tetapi sebagai pengguna buruh pelabuhan, saya harus mengatakan saya sangat kecewa dengan fitur yang hilang ini. Izinkan saya menutup argumen saya dengan kutipan dari diskusi di atas: " Saya ingin menggunakan Gentoo sebagai gambar dasar tapi jelas tidak ingin> 1GB data portage tree berada di salah satu lapisan setelah gambar dibuat. Anda bisa memiliki wadah kompak yang bagus jika bukan karena pohon portage raksasa harus muncul di gambar selama instalasi."Ya, saya dapat menggunakan wget atau curl untuk mengunduh apa pun yang saya butuhkan, tetapi fakta bahwa hanya pertimbangan portabilitas sekarang memaksa saya untuk mengunduh> 1GB pohon Portage setiap kali saya membangun gambar dasar Gentoo tidak efisien atau ramah pengguna. Lebih lanjut lebih lanjut, repositori paket AKAN SELALU berada di bawah / usr / portage, jadi SELALU PORTABEL di bawah Gentoo. Sekali lagi, saya menghargai keputusan itu, tetapi tolong izinkan saya mengungkapkan kekecewaan saya juga dalam waktu yang bersamaan. Terima kasih.
Pertanyaan asli secara terperinci:
Dari
Bagikan Direktori melalui Volume
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
dikatakan bahwa fitur Volume data "telah tersedia sejak versi 1 dari Docker Remote API". Docker saya adalah versi 1.2.0, tetapi saya menemukan contoh yang diberikan dalam artikel di atas tidak berfungsi:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Apa cara yang tepat di Dockerfile untuk memasang volume yang dipasang di host ke dalam wadah buruh pelabuhan, melalui perintah VOLUME?
$ 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
. Pembahasannya cukup luas, dan ada cara singkat untuk meringkas apa alasannya?