Во-первых, последние версии Docker позволяют создавать и использовать named volumes. Это означает, что «контейнеры только для данных» устарели и больше не нужны, и на самом деле в наши дни они считаются анти-шаблонами. Это довольно просто создавать и использовать именованный объем:
docker volume create --name=foo
docker run -d -v "foo:/dbdata" --name "db1" x/mysql
Вы можете просматривать свои объемы с:
docker volume ls
Что касается вашего главного вопроса, вы можете воспользоваться Docker-х union filesystem (который может также более просто называемый «общий слой»). Это означает, что если вы создадите два контейнера из образа ubuntu (например, docker run -d --name=one ubuntu
и docker run -d --name=two ubuntu
), оба этих контейнера будут использовать те же объекты файловой системы в базовом образовании ubuntu. Так, например, файл /etc/passwd
в обоих этих контейнерах указывает на то же /etc/passwd
данные, хранящиеся на диске. Это часть того, что подразумевается под термином «файловая система объединения» в контексте Docker.
Так что просто ознакомьтесь с этими знаниями и сделайте шаг «испечь» эти модули в базовое изображение для использования всеми контейнерами для ваших разных клиентов. Это просто означает создание собственного изображения из файла Docker, который использует FROM wordpress:latest
наверху. Продолжая пример WordPress, и если вы хотите создать кучу плагинов WP, вы можете просто сохранить их в /var/www/html/wp-plugins
(или что-то еще) и включить только некоторые из них в вашей конфигурации. Так как они запекаются в созданном вами изображении (и использовали один и тот же образ для создания всех ваших разных контейнеров), все эти файлы модулей указывают на точные точные данные, хранящиеся на диске, через файловую систему union. Конечно, если кто-то меняет код в одном из своих модулей, например, изображение отдельного контейнера будет сохранять изменения в собственном слое изображения, но базовые файлы будут из одних и тех же данных, не занимая лишнего места. Конечно, вы можете заменить любую используемую CMS.
Теперь, когда я работаю, я недавно создал систему хостинга на основе Docker для людей, которые будут использовать. Проблема в том, что мы хотели, чтобы каждый клиент имел свою собственную копию файловой системы CMS.Несмотря на то что объединенная файловая система означает, что изменения в базовом изображении будут храниться в их собственных слоях изображения, что было недостаточно для парня, который подписывает мою зарплату. Они хотели, чтобы у каждого клиента был свой собственный объем EBS с собственной копией файловой системы CMS. Поэтому в этой ситуации, когда вы хотите, чтобы каждый клиент имел свой собственный том (например, чтобы транспортировать их для резервного копирования или переходить на новый хост и т. Д.), Вы не сможете обойти проблему использования дополнительного хранилища для этих файлов.
Это своего рода CMS –