2016-09-11 2 views
0

Я контейнеризую веб-приложение, которое имеет зависимости от контейнера.Конструкция зависимостей докеров для конфигурации контейнеров и запуска

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

  1. Существует контейнер mysql, который компилирует mysql, устанавливает его и настраивает.

  2. Существует контейнер learnintouch, который устанавливает файлы и семена пользовательских данных продукта в контейнер mysql.

  3. Существует контейнер learnintouch.com, который устанавливает файлы и семена пользовательских данных веб-сайта в контейнер mysql.

Посещение данных является частью установки приложения и должно выполняться только один раз в течение срока службы приложения.

Данные посева довольно длинные, очень длинные на самом деле.

Было бы неплохо, если бы приложение было создано И начато файлом docker-compose.yml, сидящим в каталоге learnintouch.com.

Сначала я надеялся иметь только три контейнера, все иждивенцы, с каждым зависимым контейнером, ожидая, что его зависимость завершит его посев данных, прежде чем запустить его и, наконец, запустить приложение.

Теперь я вижу, что этого будет трудно достичь, если не невозможно. Трудно дождаться завершения загрузки докеры, чтобы запустить службу, но тем более, чтобы проверить, завершилось ли поселение данных.

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

Это обычная практика?

ответ

0

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

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

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

+0

Когда вы говорите «у вас может быть несколько файлов для компоновки», вы имеете в виду несколько файлов docker-compose.yml? Я думал, что у меня может быть только один каталог. У меня есть один контейнер Docker для одного каталога. Интересно, как я мог запускать несколько файлов Docker Compose. – Stephane

+0

Вы можете запустить 'docker-compose -f docker-compose.dev.yml up', чтобы запустить файл вашей docker-compose.Чтобы избежать конфликтов при запуске нескольких композиций в одной и той же среде, вы также захотите изменить проект с помощью 'docker-compose -p dev -f docker-compose.dev.yml up'. Вот если все в одном каталоге. Вы всегда можете организовать различные каталоги. – BMitch

+0

Хорошо, было бы интересно увидеть один пример вашего проекта, часть о контейнере, слушающая его зависимость, поступающая в онлайн-режиме, и, в свою очередь, очень аккуратная. Затем я попытаюсь прочитать о том, как подключиться к микросервисам. – Stephane

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