Суть такова есть web проект №1 и есть web проект №2 (на laravel если это имеет значение).
Проект №1 управляет по API проектом №2.
Необходимо:
1) Запихнуть проект №2 в образ (со всем необходимым nginx, php итп) - я это сделал docker-compose собрал из разных образов все пробросил, все подключил
2) Из проекта №1 запускать контейнеры с проектом №2 из образа - ?
3) Из проекта №1 управлять проектами№2 в разных контейнерах - ?
4) Правильно организовать сеть контейнеров (пока в области одной машины)
Вопрос как правильно организовать весь этот процесс? Сделать все контейнеры со своими ip, управлять ими, куда смотреть, что читать, что изучать?
Понимание Docker на уровне собрать образ, сделать compose не более.
FlooDwm, вполне нормальное замечание. docker-way - это когда в сферически идеальном мире в каждом контейнере крутится ровно одно приложение. В одном - nginx, в другом - php-fpm, в третьем - база, итд итп.
FlooDwm, это, опять же, не docker-way. В принципе, можно сделать контейнер, например, с php, затем внутрь контейнера куда-нибудь в /app прокидывать само приложение, и для быстрых тестов-экспериментов так даже иногда делают, но это неправильно и надо отучаться так делать. Правильно делать образ, где приложение загружено внутрь контейнера. Если планируется несколько видов приложений, то делать базовый образ (возможно, со всеми необходимыми дополнительными библиотеками и компонентами, ну или взять готовый кем-то сделанный) и от него потомками наследовать конкретные приложения.
shurshur, а что вы подразумеваете под "загружено в контейнер" COPY? тоесть грубо говоря я скопирую готовый проект на ларе в контейнер с нджинском и пхп
FlooDwm, да, копирование внутрь образа. Принято делать так, чтобы контейнер можно было создать из образа, передавая только параметры в environment и/или файл конфига через volume. В общем, чтобы за контейнером не нужно было тащить само приложение.
Можно на том же докерхабе посмотреть, как устроено большинство популярных образов всяких mysql или nginx, как в их по мануалу предлагается запускать.
Не нужно из контейнера пытаться создавать другие контейнеры! (Да, технически это можно, но непросто, и новичкам полезнее вообще не знать о такой возможности, чтобы избежать ненужных искушений) Их надо создавать непосредственно с хоста. Самый простой способ оркестрации - docker-compose. В одном файле пишутся описания всех контейнеров со связями между ними, потом всё это запускается одной командой. В официальной документации и в интернетах полно информации и примеров.
1)Не нужно из контейнера пытаться создавать другие контейнеры! - где вы видите что я собираюсь из контейнера создавать другие контейнеры? Я хочу из хоста это делать!
2)Самый простой способ оркестрации - docker-compose. - именно так и собирается образ с проектотм №2 (тоесть из образов nginx, php, mysql и волумами подключен проект #2, к базе подключен локальный итп)
Вопрос как из хоста теперь по команде запускать много таких сборок? Управлять ими?
FlooDwm,
1. Я так понял, что проект №1 в докере создаёт контейнер проекта №2. Возможно, понял неправильно, и проект №1 работает прямо на хосте.
2. Зачем много сборок? Гонять раздельно проды-тесты и всякие разные ветки? Это можно делать просто отдельными docker-compose.yml в разных каталогах. Каждый с точки зрения docker-compose будет отдельным проектом со своим префиксом и изолированной сетью.
shurshur, проект №1 это просто web интерфейс (он крутиться на хосте) он управляет проектом №2 в данный момент на другой машине (напрмер). Я хочу сделать чтоб из №1 я мог собирать №2 (по нажатию кнопки) этих №2 может сколь угодно много. Каждая сборка абсолютно одинакова и будет выполнять одинаковые вещи только для разных пользователей. Для каждого пользователя при регистрации на №1 будет собираться свой №2 и уже управляться в зависимости от его задач
FlooDwm, то есть это уже не просто задача по запуску конечного числа контейнеров, а какая-то система их управлениями? Выглядит как задача не самая простая уже.
Как самый простой (но возможно не лучший для данной задачи) способ видится создание каталога, в нём генерация docker-compose-файла по шаблону и запуск всей группы контейнеров одной командой. Ну и дальше надо решить, как до них пускать пользователей (если это какой-то web - прокидывать отдельный порт до каждого нужного IP или прокидывать через общий ningx или что-то ещё).
Ёщё docker-compose поддерживает scaling сервисов, можно контейнеров одного типа запустить несколько, но этим кажется пользуются достаточно редко, я сам не пробовал ни разу.
Можно также самому управлять контейнерами непосредственно через вызовы docker, а на следующем уровне - вообще перейти на API-вызовы docker через сокет. Ещё можно начать осваивать более сложные вещи типа docker swarm, если объёмы того потребуют.
FlooDwm, docker swarm это больше к тому чтобы запускать на некотором множестве серверов. Возможно, в данной задаче полезно смотреть на него сразу же, либо на другие подобные системы оркестрации.