Я хотел бы клонировать прикрепленное приложение, включая все его данные, в котором в этом примере используются три контейнера: 1) контейнер веб-приложения, такой как CMS, 2) контейнер базы данных и 3) контейнер объема данных (с использованием докеры томов).Сценарий для клонирования/снимка Докерные контейнеры, включая их данные?
С компоновкой докеров я могу легко создать идентичные экземпляры этих контейнеров только с начальными данными. Но что, если я хочу клонировать набор запущенных контейнеров на одном сервере, включая все его накопленные данные, аналогично тому, как я бы клонировал контейнер KVM? С KVM я бы приостановил или выключил виртуальную машину, клонировал что-то вроде virt-clone, а затем начал клонированный гость, который имеет все те же данные, что и оригинал.
Одним из вариантов использования было бы создание клона/моментального снимка работающего веб-сервера разработки перед внесением серьезных изменений или перед установкой новых версий плагинов.
С Docker это не кажется таким простым, поскольку данные не копируются автоматически вместе с контейнером. В идеале я хотел бы сделать что-то простое, например docker-compose clone
, и в итоге получить второй набор контейнеров, идентичный первому, включая все их данные. Ни Docker, ни docker-compose не предоставляют команду clone (начиная с версии 1.8), поэтому мне нужно будет рассмотреть различные подходы, например резервное копирование &, восстановление данных/базы данных или использование стороннего инструмента, такого как Flocker.
В связи с этим возникает вопрос о том, как сделать что-то похожее на снимки KVM докционированного приложения, с возможностью легко вернуться в предыдущее состояние. Предпочтительно клонирование, моментальные снимки и реверсирование должны быть возможны с минимальным временем простоя.
Что было бы предпочтительным способом Докера для достижения этих целей?
Редактировать: Основываясь на первом ответе, я сделаю свой вопрос немного более конкретным, чтобы, надеюсь, прийти к программным шагам, чтобы иметь возможность делать что-то вроде docker-compose-clone
и docker-compose-snapshot
с использованием сценария bash или python. Клонирование содержимого томов докеров становится для него ключом, так как сами контейнеры в основном клонируются каждый раз, когда я запускаю docker-compose в одном и том же файле yaml.
Вообще мой полный клон сценарий должен был бы
- дублировать каталог, содержащий файл докер-создания сообщения
- временно остановить контейнеры
- создания (но не обязательно запускать) второй набор контейнеров
- определяют-объемы данных, которые будут дублироваться
- резервного копирования этих данных-томов
- восстановление-объемов данных в клонированный контейнер данных
начать второй набор контейнеров
Будет ли это правильный путь, о нем и как я должен реализовать это? Я особо не уверен, как сделать шаг 4 (определить тома данных, которые будут дублироваться) в сценарии, так как команда
docker volume ls
будет доступна только в Docker 1.9.Как я могу сделать что-то похожее на снимки KVM, используя этот подход? (возможно, используя функции файловой системы COW из ZFS, которые моя установка Docker уже использует).
Да, как указано в вопросе, я уже использую контейнеры объема данных (теперь я сделал формулировку немного понятнее).Я бы предпочел не использовать контейнеры-хосты, поскольку они менее переносимы. AFAIK Docker 1.9 добавит 'docker volume create, inspect, ls, rm' [commands] (https://github.com/docker/docker/tree/master/man), которые не совсем предоставляют необходимые функции для клонирования. Были ли у вас какие-либо предложения о том, как _determine томов данных, которые должны быть дублированы в сценарии? – ChrisW