Сразу хочу заметить, что с Docker на Вы, но очень хочу разобраться и решить данную задачу.
Имеем веб-приложение (nginx + php-fpm + mysql), нужно дать возможность потенциальным покупателям пощупать приложение, при этом, с возможностью его "сломать" (модифицировать), доступы при этом у него ограничены - получить исходный код мы не даем.
Нужен инструмент, который позволит легко развернуть тестовый стенд, в дальнейшем его убить и переразвернуть.
Важный момент - на одной машине, хочу разворачивать неограниченное неограниченной (в разумных пределах) количество контейнеров с тестовыми стендами.
Буду благодарен за ссылки, наработки, подсказки по архитектуре.
Так и разворачивайте, в чем вопрос не понятно.
Если машина под вашим контролем, если ваши контейнеры разворачиваются из вашего приватного registry (место где хранятся подготовленные контейнеры), то можете сделать сколько угодно стендов и запускать и убивать их сколько вам нравится и к клиенту код не попадет.
если уж совсем по модному-молодежному хотите - осваивайте Terraform, чтобы докером управлять - сможете легким движением пятки деплоить свой код, хоть на тестовый стенд чтобы показать клиенту, хоть на прод в Амазон , чтобы все сразу завертелось..
Первое что мне не понятно, это как разрулить проброс портов.
Есть docker-compose.yml, в нем для контейнера nginx я указываю порт 8080, который смотрит наружу.
Для nginx-proxy я укажу, что vhost1 должен обращаться к 8080, все вроде как логично, но как быть со вторым экземпляром контейнера nginx? Его я также запущу из копии docker-compose.yml в котором аналогично, внешний порт будет 8080 и контейнер попросту не запуститься.
Про один nginx я понял, а вот как организовать правильно разброс трафика между контейнерами не понял.
Может подскажете, как правильно загуглить, чтобы найти то что нужно?
Вот один из самых интересных проектов автоматического nginx-proxy https://github.com/nginx-proxy/nginx-proxy
Вот пример его использования на моем небольшом проекте https://github.com/q2digger/docker-jira-software/b...
На контейнере приложения, у меня это Джира, указано имя виртуального хоста и порт на который будет пробрасываться трафик с nginx-а.
Все взлетаем, nginx видит контейнер с переменной окружения virtual_host и virtual_port , генерит для него виртуальный хост и все, можете работать..
Я же правильно понял, что в данном случае, если мне нужно запустить 2 виртуальных хоста, для них будут созданы отдельные контейнеры с jiradb, proxy и jira?
Это все зависит от вашего проекта, у меня например может быть 3 джиры, 2 конфлюенса (это уже 5 виртуальных хостов), одна база данных и фронтенд - nginx-proxy .
Та репу, что Вы дали в предыдущем комментарии, тождественна для запуска одного экземпляра джиры, верно?
Чтобы реализовать то, про что Вы сейчас пишите, нужно в docker-compose.yml указывать только сервис джира (без БД и nginx-proxy)?
нет. в docker-compose описываются все контейнеры, который входят в этот сервис.
Вы можете запускать все контейнеры руками, указывать порты, вольюмы и т.п.
А можете сесть, один раз описать свой проект в докер-композе и запускать этот файл (и не вспоминать какой порт куда мапится и в каком volume хранятся данные базы данных),
контейнеры будут подняты, сети-вольюмы-порты настроены и подключены и т.п.
что вы там опишите - зависит только от вашего желания, ктото запихивает базу в докер, ктото нет. У кого то есть nginx внутри, у кого то нет.
если у вас несколько разных конфигураций - сделайте несколько docker-compose.yml файлов и запускайте какой надо.
Развернуть тестовый стенд можно из бекапа. Пусть трогают, ломают. Через планировщик просто разворачиваем бекап. Докер тут совсем ни к чему.
Ansible сценарии для окружения и управления пишутся за 1 день. Пример