Развертывание веб-приложения в контейнере данных докеров

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

Я хочу иметь контейнер dginx nginx, а за ним - другой контейнер с приложением. Чтобы запустить последнюю версию моего приложения, я хочу загрузить готовый контейнер из своего приватного реестра докеров. Приложение на данный момент является чисто статическим html, javascript что-то.

Итак, мой план - создать изображение докеров, которое будет хранить файлы, и укажет именованный том в папке some/webapp. Контейнер nginx будет обслуживать этот том. Я не вижу другого способа, как перемещать кучу файлов в удаленную систему "докеры в контейнерах". Я действительно не создаю проклятый контейнер данных?

В любом случае, что происходит во время обмена контейнерами приложений? Когда я останавливаю контейнер приложения, объем остается доступным, так как он помещается на хост. Когда я вытягиваю и запускаю новую версию контейнера приложений. Том будет создан снова и предварительно заполнен файлами изображений, хранящимися в том же месте, заменяя содержимое на хосте, чтобы контейнер nginx загружал сервер с новой версии приложения. Правильно? Что произойдет, когда я укажу том, который еще не существует из контейнера nginx.

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

FROM training/webapp

VOLUME webapp:/webapp

Ответ 1

Я думаю, вам может понадобиться то, что я описал здесь fooobar.com/info/559815/...

Проблема с томами заключается в том, что когда контейнер воссоздается, а не docker-compose down, а скорее docker-compose pull + up, новый контейнер не будет иметь ваш "новый код, сохраненный в томе", а скорее из-за переработанного тома, еще старый объем анонов. Дело в том, что в любом случае вам понадобится объем анода для кода, так как вы хотите его перераспределить, а не именованный том, так как вы хотите, чтобы код был заменяемым.

При повторном создании анонимного тома не удаляется, так что скажем, у вас есть изображение: v1 прямо сейчас, и вы тянете изображение: v2, а затем делаете docker-compose up. Он будет воссоздавать ваш контейнер на основе image:v2 - когда это будет завершено, у вас будет новый контейнер, но код все еще находится из старого контейнера, который был основан на изображении: v1, так как анон-том не был заменен, он был повторно назначен. docker-compose down && docker-compose up решит это для вас - но вы должны помнить об этом, когда имеете дело с вашей идеей. (вниз удаляет анонные объемы)

В общем, есть pro/con, см. мой другой пост.

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

В прошлом вам нужно было создать контейнер с томом, а позже использовать монтировку этого тома на основе контейнера (контейнер будет частью статического/имени), сегодня вы просто создаете именованный том name и смонтировать с помощью этого имени тома, нет необходимости в том, что для жесткого диска, основанного на контейнерах, на основе busybox killed after start.