docker контейнера на выделенном сервере
Кто разбирается в docker? Можете мне подсказать саму концепцию, или вернее даже принцип работы нескольких докер контейнеров на выделенном сервере на хостинге? Имеются три контейнера:
docker_site - node.js/next.js
docker_api - node.js/express.js
docker_db - php/mysql
Я запускаю три контейнера на домене www.my-domain.com. С docker_site пробрасываю порты 80:3000, с docker_api 80:9000, с docker_db 3306:3360
Теперь последует ряд возможно странных вопросов от человека, который еще не разобрался с докер и никогда не работал с удаленным сервером, но хочет понять принцип работы его контейнеров на сервере:
Каждый контейнер будет рассмотрен как отдельный сайт? А порты, что я прокидываю наружу не должны конфликтовать и будут работать в контексте www.my-domain.com?
Как мне при таком подходе сделать стартовую страницу отображением сервера next.js, контейнера docker_site? То есть http://www.my-domain.com - открывает стартовую страницу приложения на next.js
Ответы (1 шт):
Каждый контейнер будет рассмотрен как отдельный сайт? А порты, что я прокидываю наружу не должны конфликтовать и будут работать в контексте www.my-domain.com?
Это зависит от конфигурации, но судя по тому, что вы описали, то да. У вас каждый контейнер должен быть замаплен на отдельный порт и этот порту будет выставлен наружу. Но так обычно не делают.
Как мне при таком подходе сделать стартовую страницу отображением сервера next.js, контейнера docker_site? То есть http://www.my-domain.com - открывает стартовую страницу приложения на next.js
Насколько я понял все 3 контейнера - это одно приложение, next - FE, express - BE, mysql - база. Для решения этой проблемы, обычно контейнеры запускают не руками (хотя и так тоже можно), а при помощи Docker Compose, тогда эти контейнеры будут объединены в одну сеть (т.е. каждый контейнер будет иметь выделенный ip адрес и dns имя из этой сети и они смогут между собой соединяться).
В таком случает базу данных "выставлять наружу" вообще не нужно, т.е. не нужно указывать маппинг портов, т.к. к базе никто не должен подключаться за пределами вашего сервера. Это не безопасно, даже если у вас там есть пароли.
А для того, чтобы избежать конфликт портов, например FE и BE слушают один порт 80, можно воспользоваться proxy, например nginx, и настроить перенаправление:
www.my-domain.com->nextwww.my-domain.com/api/->api