2016-04-03 1 views
0

Как вы, ребята, имеете дело с файлами веб-приложений для ваших контейнеров-докеров? Мы используем одно и то же приложение для> 400 клиентов. Это одно и то же приложение с включенными/отключенными модулями (есть дополнительные файлы).Как бороться с файлами веб-приложений в докере?

В настоящее время я использую этот подход: создайте изображения, например. для Mysql, Nginx + PHP, а затем запустить контейнер с определенной приготовленную папку приложения:

docker create -v /dbdata --name dbstore x/mysql /bin/true 
docker run -d --volumes-from dbstore --name db1 x/mysql 
docker run -d -P --name web --link db1:db1 -v /webapp:/opt/webapp x/webapp php-start index.php 

ИМХО, это пространство перерасхода. Я думаю, что немного сложнее создать> 100 тегов (ревизий) контейнера данных docker для webapp. Пожалуйста, совет, как справиться с этой проблемой?

ответ

2

Во-первых, последние версии 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. Поэтому в этой ситуации, когда вы хотите, чтобы каждый клиент имел свой собственный том (например, чтобы транспортировать их для резервного копирования или переходить на новый хост и т. Д.), Вы не сможете обойти проблему использования дополнительного хранилища для этих файлов.

1

Это зависит:

Если файлы статичны, и вы хотите, чтобы иметь возможность перемещать контейнер вокруг легко, то я хранить файлы в контейнере, просто копируя их в веб-место в одном каталоге ,

Если у вас есть надежное внешнее расположение, и вы измените файлы более регулярно (например, с помощью какого-того CMS), вы можете просто запустить апач или контейнер Nginx и смонтировать том

+0

Это своего рода CMS –

Смежные вопросы