1

В настоящее время у меня есть новая настройка сервера, где у меня работает Docker. Я использую Gitlab CI для создания и отправки новых изображений. Я просто не могу определить, как развернуть / настроить файлы моего проекта и образы докеров.

Чтобы понять мою ситуацию, представьте себе проект PHP со следующей структурой папок

  • система
  • ЦСИ
  • общественности
  • пользователи
  • добавления

Это вымышленная структура, но она отражает ситуацию, когда все, кроме папки загрузки, содержит PHP-скрипты.

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

Тем не менее, именно здесь появляются мои вопросительные знаки. Какой подход я должен выбрать? Так как:

  1. Создание изображений nginx и php дублирует файлы моего проекта на обоих изображениях, создавая изображения размером 2x100 Мб. Sidenote: загружаемые файлы будут смонтированы с хост-системы.
  2. Создание одного образа с обоими службами должно устранить вышеперечисленное, но сопряжено с другими проблемами, например ведением журнала и управлением службами.
  3. Создание контейнера данных также позволило бы разрешить 2 размера изображения и устранить проблемы из пункта 2, но это считается плохой практикой.
  4. Согласно документации я должен использовать тома данных на хосте для обмена данными между контейнерами. Это исключило бы контейнер данных, но мне нужно было бы, чтобы процесс сборки также развернул файлы проекта на общем томе данных, что, я думаю, я бы предпочел не иметь, так как это несколько отрицательно сказывается на цели наличия контейнеров.
  5. Я также не вижу, как предыдущий пункт (пункт 4, чтобы быть точным) должен работать / быть настроенным. Будет ли у меня шаг сборки в Gitlab, который создает том и копирует все файлы проекта на том, чтобы потом смонтировать его в контейнеры php и nginx?

Кроме того, я просто запускаю docker на своем сервере, так как мне не нужны такие решения, как Kubernetes или Rancher.

1 ответ1

1

Для управления приложением, созданным N-сервисом, я предлагаю вам взглянуть на docker-compose, простую в установке, просто управляйте приложением docker с помощью некоторой функции, такой как зависимость.

Распределение данных между томами контейнера является наилучшим решением. Если одному из контейнеров нужно просто прочитать данные, вы можете подключить том как том «Только для чтения», доступ к хосту и постоянный (до тех пор, пока вы его не удалите), поэтому вам не нужно создайте его во время процесса сборки. Я использую его в проекте django с nginx в качестве внешнего интерфейса, статический файл обслуживается nginx из тома докера, где их написал контейнер django. Вы можете создать перед запуском контейнера том, запустив Docker Volume. Создать том_имя popolate с файлами вашего проекта и запустить контейнеры, вручную запустив Docker или Docker-compose.

Ссылки:https://docs.docker.com/compose/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .