Оригинальный вопрос: Как использовать инструкцию VOLUME в Dockerfile?
Реальный вопрос , который я хочу , чтобы решить это - как монтировать тома хоста в докеров контейнеры в Dockerfile во время сборки, то есть, имея docker run -v /export:/export
возможность в течение docker build
.
Причина этого для меня заключается в том, что при создании объектов в Docker я не хочу, чтобы эти apt-get install
кэши ( ) блокировались в одном докере, а делился / использовал их повторно. Это основная причина, по которой я спрашиваю об этом вопросе.
Последнее обновление:
До docker v18.09 правильный ответ должен быть таким, который начинается с:
Существует способ монтировать том во время сборки, но он не включает Dockerfiles.
Однако это был плохо сформулированный, организованный и подтвержденный ответ. Когда я переустанавливал свой докер, я наткнулся на следующую статью:
Подключите сервис apt-cacher-ng к
https://docs.docker.com/engine/examples/apt-cacher-ng/.
Это решение докера на этот / мой вопрос, не прямо, а косвенно. Это обычный путь, который нам предлагает делать докер. И я признаю, что это лучше, чем тот, который я пытался спросить здесь.
Другой способ, недавно принятый ответ , например, Buildkit в v18.09.
Выберите тот, который подходит вам.
Был: было решение - рокер, который был не от Docker, но теперь, когда рокер снят с производства, я снова возвращаю ответ на «Невозможно» .
Старое обновление: так что ответ "Не возможно". Я могу принять его как ответ, так как знаю, что этот вопрос широко обсуждался на https://github.com/docker/docker/issues/3156 . Я могу понять, что переносимость является первостепенной проблемой для разработчика докеров; но как пользователь докера, я должен сказать, что очень разочарован этой отсутствующей функцией. Позвольте мне завершить мой аргумент цитатой из вышеупомянутого обсуждения: « Я хотел бы использовать Gentoo в качестве базового изображения, но определенно не хочу, чтобы после создания изображения было более 1 ГБ данных дерева Portage в любом из слоев. может иметь несколько хороших компактных контейнеров, если бы не гигантское дерево портежей, которое должно появиться на изображении во время установки.«Да, я могу использовать wget или curl для загрузки всего, что мне нужно, но тот факт, что из соображений переносимости теперь я вынужден загружать> 1 ГБ дерева Portage каждый раз, когда я создаю базовый образ Gentoo, не эффективен и не удобен для пользователя. Более того, хранилище пакетов ВСЕГДА будет находиться в / usr / portage, поэтому ВСЕГДА ПОРТАТИВНО в Gentoo. Опять же, я уважаю это решение, но, пожалуйста, позвольте мне также выразить свое разочарование в то же время. Спасибо.
Оригинальный вопрос в деталях:
Из
Поделиться каталогами через тома
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
в нем говорится, что функция томов данных «была доступна с версии 1 Docker Remote API». Мой докер версии 1.2.0, но я обнаружил, что приведенный выше пример не работает:
# 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 монтировать тома, установленные на хосте, в контейнеры Docker с помощью команды 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
. Дискуссия довольно обширная, если кратко изложить, в чем причина?