Docker Windows, как сделать свой локальный интернет?

Занимаюсь разработкой сайтов. Использую docker в качестве локального веб сервера. Когда сайт один проблем нет, я пишу конфиг сервера для docker compose, файлы сайта и БД кладу рядом с файлом docker-compose.yml и прописываю их в volume. Далее одной командой командой поднимается своя локальная копия сайта по адресу 127.0.0.1 для разработки и можно работать.

Хочу использовать docker в качестве локального интернета. То есть получить что-то вроде openserver, xampp и т.д. Например у меня есть рабочий сайт test.ru. Я хочу поднять свою локальную копию сайта по адресу dev.test.ru. Есть сайт example.com и я хочу поднять свою локальную копию по адресу dev.example.com. И чтобы эти две копии работали как обычные сайты одновременно.

Да, можно прописать порты для каждого сайта и в hosts вручную прописать домены со ссылкой на 127.0.0.1. Далее открывать dev.test.ru:8081 или dev.example.com:8082. Однако решение с портами мне кажется не красивым.

Я вижу только два решения проблемы
1. Каким то образом для каждого docker-compose.yml получать статичный IP адрес, который виден с родительской windows 10. И прописать уже этот статичный IP адрес в hosts вручную, без порта

2. Использовать docker swarm mode. Насколько я понял для swarm можно выделить один статичный IP адрес, поднять его один раз на том же localhost (127.0.0.1) и дальше даже без порта он по домену будет адресовать запрос нужной ноде.

Эти два решения сугубо теоретические. На практике ни одно из них реализовать не получилось. Подскажите как именно (и возможно ли вообще) реализовать одно из двух вышеозначенных решений? Либо предложите свое, чтобы все работало примерно так же.

На тостере уже был похожий вопрос, однако там в итоге рабочего решения именно для docker так и не предложил никто, посоветовали vagrant и пользоваться чистой виртуалкой. Однако интересует рабочее решение именно для docker.
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
@Alorian Автор вопроса
Поразбирался в итоге с проблемой. Вот такое решение для себя нашел:
https://verstaem.com/devops/docker-php-development/

Оптимальный вариант использования на windows описан в разделе
"Доступ к контейнерам через nginx reverse proxy"

Спасибо shaqster. Вы правильное направление пытались показать, но все же не до конца получилось разобраться в вопросе, либо я вас не понял. В любом случае ваши ответы сильно помогли в поиске наилучшего решения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
поставьте на "входе" еще 1 контейнер с nginx, который будет работать как reverse-proxy.
Ответ написан
@shaqster
Symfony3 Guru
  1. Вам понадобится вот этот контейнер
  2. Примерная конфигурация. Привожу только важное. Возможно вам понадобятся собственные настройки для nginx (мне понадобились).
    version: '2'
    services:
    		test:
    			expose:
    				- "80"
    			environment:
    				- VIRTUAL_HOST=dev.test.ru
    		nginx-proxy:
    			image: jwilder/nginx-proxy
    			container_name: nginx-proxy
    			restart: none
    			volumes:
    				- /var/run/docker.sock:/tmp/docker.sock:ro
    				- ./nginx.conf:/etc/nginx/proxy.conf
    			links:
    				- test

  3. Необходимо будет настроить сервер в контейнере test на работу с соответствующим доменом
  4. Запускаете, смотрите в какой подсети он поднимается. Добавляете в hosts запись вида 172.19.0.1 dev.test.ru
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы