Dockerfile COPY с образа на хост - PullRequest
       14

Dockerfile COPY с образа на хост

0 голосов
/ 03 февраля 2019

У меня есть Dockerfile, в котором я сначала компилирую сервер Mosquitto в один слой, затем использую COPY для копирования исходных файлов подключаемого модуля аутентификации в образ и, наконец, запускаю компиляцию этого подключаемого модуля.

В итоге полученное изображение можно использовать в контейнере, на котором сервер Mosquitto работает с загруженным этим плагином.

Я хочу изменить этот плагин и перекомпилировать его:перезапустить сборку Dockerfile.Поскольку первый слой не изменен, он просто копирует измененные файлы и снова запускает компиляцию.

Теперь я хочу извлечь плагин (файл .so) из этого нового изображения и переместить его.в подключенный каталог на хосте, так что текущий запущенный сервер Mosquitto нужно будет только перезапустить.

Можно ли использовать команду COPY в обратном порядке, чтобы она копировала скомпилированный плагин вуказанную директорию хоста, чтобы я мог затем удалить вновь созданный образ?

Или это вообще плохой подход?Должен ли я лучше выполнить exec в работающем контейнере и пересобрать плагин (что ограничило бы меня сборкой плагина на машине, на которой работает сервер)?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

COPY, вероятно, не тот инструмент, который вы пытаетесь достичь.

Либо используйте том времени выполнения, как предлагает @gmc, либо скопируйте его на хост, используя docker cp.

* 1005.* Использование

docker cp CONTAINER:SRC_PATH DEST_PATH

Однако я не уверен, что это правильный подход в целом.Не похоже, что Docker - это инструмент, который вам нужен для достижения ваших целей.Если вам нужен изменяемый экземпляр сервера, есть лучшие варианты.

0 голосов
/ 03 февраля 2019

Я не знаю подробностей используемых вами инструментов отдельного компилятора, но я думаю, что получаю то, чего вы пытаетесь достичь:

Я бы не включил команду COPY в Dockerfile.Dockerfile должен содержать только необходимые инструкции, чтобы иметь изображение с необходимыми инструментами и зависимостями для выполнения процесса компиляции, и, возможно, сценарий оболочки с конкретными порядками компиляции.

Теперь вы запускаете docker build и выесть ваше изображение, давайте назовем его mosq.Предположим, что:

  • Ваш исходный код находится на вашем локальном компьютере в /home/me/my-source-code
  • После выполнения вы получаете результат в подпапке dist этой папки: /home/me/my-source-code/dist/result.so
  • Ваше изображение имеет скрипт /compile.sh, который компилирует исходный код, присутствующий в /compilation (эта папка должна быть пустой на изображении)

Затем вы запускаетеобраз смонтированного тома параметр: /home/me/my-source-code на /compilation внутри контейнера

При условии, что все предыдущие точки, команда docker run должна выглядеть примерно так:

docker run -d --name my-compiler -v /home/me/my-source-code:/source mosq /compile.sh

И так, контейнер будет работать молча и умрет, и после этого у вас будет ваша компиляция в /home/me/my-source-code/dist/result.so

Особенности могут сильно различаться в зависимости от деталей, но я надеюсь, что вы получитеИдея: подготовить все в вашем изображении так, чтобы при выполнении одного скрипта sh компилятор брал откуда-то код и запускался.Смонтируйте том с кодом в этой папке.Если компилятор выводит результат где-то еще, подключите другой том с хост-машины, чтобы получить результат там.

...