Oryginalne pytanie: Jak korzystać z instrukcji VOLUME w Dockerfile?
Rzeczywiste pytanie, które chcę rozwiązać, to - jak zamontować woluminy hosta w kontenerach dokerów w Dockerfile podczas kompilacji, tj. Mając docker run -v /export:/export
możliwość podczas docker build
.
Powodem tego jest dla mnie budowanie rzeczy w Dockerze, nie chcę, aby te ( apt-get install
) pamięci podręczne były zamknięte w jednym oknie dokowanym , ale aby je udostępniać / ponownie wykorzystywać. To jest główny powód, dla którego pytam o to pytanie.
Najnowsza aktualizacja:
Przed dokerem v18.09 poprawną odpowiedzią powinna być ta, która zaczyna się od:
Istnieje sposób na zamontowanie woluminu podczas kompilacji, ale nie wymaga on plików Dockerfiles.
Była to jednak źle sformułowana, zorganizowana i poparta odpowiedź. Podczas ponownej instalacji mojego okna dokowanego natknąłem się na następujący artykuł:
Dokuj usługę apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
To rozwiązanie dokera na to / moje pytanie, nie bezpośrednio, ale pośrednio. Jest to ortodoksyjny sposób, jaki sugeruje nam doker. Przyznaję, że jest lepszy niż ten, o który tutaj pytałem.
Innym sposobem jest nowo zaakceptowana odpowiedź , np. Buildkit w wersji 18.09.
Wybierz, który Ci odpowiada.
Było: Było rozwiązanie - rocker, który nie był z Dockera, ale teraz, kiedy rocker został wycofany, ponownie przywracam odpowiedź na „Niemożliwe” .
Stara aktualizacja: więc odpowiedź brzmi „Niemożliwe”. Mogę zaakceptować to jako odpowiedź, ponieważ wiem, że problem został szeroko omówiony na stronie https://github.com/docker/docker/issues/3156 . Rozumiem, że przenośność jest najważniejszym problemem dla programistów dokerów; ale jako użytkownik dokerów muszę powiedzieć, że jestem bardzo rozczarowany tą brakującą funkcją. Pozwólcie, że zamknę mój argument cytatem ze wspomnianej dyskusji: „ Chciałbym użyć Gentoo jako obrazu podstawowego, ale zdecydowanie nie chcę, aby po zbudowaniu obrazu ponad 1 GB danych z drzewa Portage znajdowało się w żadnej z warstw. mogłyby mieć ładne, kompaktowe pojemniki, gdyby nie gigantyczne drzewo portage, które musiało pojawić się na obrazie podczas instalacji.„Tak, mogę użyć wget lub curl, aby pobrać wszystko, czego potrzebuję, ale fakt, że sama rozważność w zakresie mobilności zmusza mnie do pobrania> 1 GB drzewa Portage za każdym razem, gdy buduję obraz podstawowy Gentoo, nie jest ani wydajny, ani przyjazny dla użytkownika. więcej, repozytorium pakietów BĘDZIE ZAWSZE znajdowało się w katalogu / usr / portage, więc ZAWSZE MOŻNA PRZENOSIĆ pod Gentoo. Znowu szanuję decyzję, ale proszę pozwolić mi wyrazić moje rozczarowanie również w międzyczasie. Dzięki.
Oryginalne pytanie szczegółowo:
Z
Udostępniaj katalogi za pośrednictwem woluminów
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
mówi, że funkcja Woluminy danych „była dostępna od wersji 1 Docker Remote API”. Mój doker jest w wersji 1.2.0, ale znalazłem przykład podany w powyższym artykule nie działa:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Jaki jest właściwy sposób w Dockerfile do montowania woluminów montowanych na hoście w kontenerach dokerów za pomocą polecenia 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
. Dyskusja jest dość obszerna, czy istnieje krótki sposób na podsumowanie, jaki jest powód?