IvanFantoM
@IvanFantoM
PHP-разработчик

Как организовать работу нескольких версий приложения с помощью docker?

Стоит задача разворачивания разных веток приложения в docker контейнерах на удаленном сервере.
Каждая ветка имеет свой номер (номер задачи). Приложение разворачивается с помощью docker-compose и состоит из 3-х сервисов: nginx, php-fpm, mysql. Каждая ветка должна быть доступна под своим url (1001.example.com, 1002.example.com и т.д.)
Для каждой ветки хочется запускать свои контейнеры nginx, php-fpm и mysql

Проблема в том, что 80 порт nginx можно связать с 80 портом сервера только для одного контейнера, а хочется для каждого.

Как правильнее поступить в таком случае? Как передавать запросы в нужный контейнер?
  • Вопрос задан
  • 563 просмотра
Решения вопроса 1
IvanFantoM
@IvanFantoM Автор вопроса
PHP-разработчик
Нашел решение своей проблемы в этой статье:
Tutorial: Using Docker and Nginx to Host Multiple ...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@InoMono
А как вы вообще собираетесь различать это на стороне веб-клиента?
Если по URL или Header в HTTP - то все это умеет разруливать и nginx.
Docker Compose это инструмент разработки.
Для production нужно Docker Swarm использовать или Kubernetes или т.п.
Они такое умеют. Гуглите "Docker Swarm Blue Green Development"
Ответ написан
@LeoCata
Думаю нужно присмотреться к swarm.

Если очень хочется запускать несколько копий nginx на одном хосте - придется отказатся от проброса порта на хост-машину:

ports:
            - '80'
            - '443'


Также добавить сеть каждой ветке приложения. В итоге получим:
nginx:
        image: nginx:latest
        ports:
            - '80'
            - '443'
        networks:
            - 1001.example.com
        restart: always
networks:
    1001.example.com:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 10.100.0.0/24 #Для каждой ветки своя подсеть.


Затем прописать в /etc/hosts

10.100.0.1 1001.example.com

Но это очень криво и на коленке. Не рекомендую повторять.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы