Я управляю серверами, на которых пользователи имеют свои собственные веб-сайты, к которым можно получить доступ по FTP (например, к хостинговой компании), и вместо того, чтобы работать над изоляцией процессов стека LAMP, мне было интересно, возможно ли реализовать Docker и использовать изображения для каждого веб-сайта.
Насколько я понимаю, вы можете открыть экземпляр Docker через их порты, поэтому, если вы запустите два экземпляра Docker на одном сервере, вам придется предоставить два разных порта.
Но можно ли экспортировать не порты, а имя сервера, например:
- www.somewebsite.com: Docker instance 1
- www.otherwebsite.com: Docker instance 2
- www.etc.com: экземпляр Docker ...
И это на том же сервере.
Я думал об установке на сервер только Apache, который перенаправлял бы запрос к выделенному экземпляру Docker на основе имени сервера, но тогда мне пришлось бы устанавливать Apache (снова!) И MySQL на любые экземпляры Docker.
Возможно ли это, более того, интересно ли это с точки зрения производительности (или нет)?
Спасибо за помощь.
Ответы:
Да, это возможно. Что вам нужно сделать, это предоставить несколько 80 портов. один для каждого URL. Вы можете сделать это с помощью, например, Virtual Host of Apache, работающего на хост-сервере Docker.
Конфигурационный файл Apache будет выглядеть так:
источник
ProxyPreserveHost On
, так что вы не получите много ссылок на local.hostname.ofDockerHost: 12345 insite вашего веб-сайта. Вот дополнительная информация, которая была мне полезна: digitalocean.com/community/tutorials/…Возможно. Вы можете использовать apache (или, что еще лучше, haproxy, nginx или varnish, который может быть более эффективным, чем apache только для этой задачи перенаправления) на главном сервере, для перенаправления на порты apache каждого контейнера.
Но, в зависимости от сайтов, которые вы там запускаете (и их конфигурации apache), может потребоваться гораздо больше памяти, чем при использовании одного центрального apache с виртуальными хостами, особенно если у вас есть модули (например, php), которые требуют много оперативной памяти.
источник
Я знаю, что на этот вопрос уже дан ответ, однако я хотел сделать еще один шаг вперед и показать вам пример того, как это можно сделать, чтобы дать более полный ответ.
Пожалуйста, посмотрите мой образ докера здесь с инструкциями о том, как его использовать, это покажет вам, как настроить два сайта https://hub.docker.com/r/vect0r/httpd-proxy/
Как сказал jihun, вам нужно убедиться, что у вас настроен Vhost. Мой пример использует порт 80 для отображения тестового сайта example.com и 81 для отображения тестового сайта example2.com. Также важно отметить, что вам нужно будет указать свой контент и выставить необходимые порты в вашем Dockerfile, вот так;
Надеюсь, это поможет объяснить процесс немного больше. Пожалуйста, не стесняйтесь задавать мне любые дополнительные вопросы по этому вопросу, рады помочь.
С Уважением,
В
источник
В моем случае мне нужно было добавить SSLProxyEngine On , ProxyPreserveHost On и RequestHeader установили Front-End-Https «On» в мой vhost-файл apache 2.4, потому что я хотел включить SSL в док-контейнере. Что касается local.hostname.ofDockerHost , в моем случае имя хост-сервера, на котором выполнялся докер-контейнер, было lucas , а порт, сопоставленный с портом 443 док-контейнера, был 1443 (потому что порт 443 уже использовался apache на хосте сервер), так что строка закончилась таким образом https: // lucas: 1443 /
Это окончательная настройка, и она работает просто отлично!
Наконец, в контейнере Docker мне пришлось настроить заголовки прокси SSL. В моем случае контейнер работал под управлением nginx и что-то под названием omnibus для настройки приложений ruby. Я думаю, что это можно настроить в конфигурационном файле nginx. Запишу как есть на всякий случай
Полное руководство по apache, ISP Config, Ubuntu server 16.04 здесь https://www.howtoforge.com/community/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744
источник