TL; DR;Вы можете подключить несколько сетей к определенному контейнеру, что позволит вам в значительной степени изолировать трафик.
полезные сети
Точка контекста, я предполагаю извопрос «полезный» означает, что существует некоторая степень изоляции между службами.
Я думаю, что бэкэнд должен быть доступен только для веб-интерфейса, а веб-интерфейс должен быть доступен для прокси.
Это довольно просто с docker-compose
.Просто укажите сети, которые вы хотите на верхнем уровне, так же, как вы сделали для reverse-proxy
:
networks:
reverse-proxy:
external:
name: reverse-proxy
frontend:
backend:
Тогда что-то вроде этого:
version: '3.5'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
networks:
- reverse-proxy
ports:
- "80:80"
- "443:443"
volumes:
...
frontend1:
image: some/image
networks:
- reverse-proxy
- backend
backend1:
image: some/otherimage
networks:
- backend
backend2:
image: some/otherimage
networks:
- backend
...
Настройте так,только frontend1 может достигать backend1 и backend2 . Я знаю, что это не вариант , так как вы сказали, что запускаете контейнеры приложений (веб-интерфейсы и бэкэнды) через docker run
.Но я думаю, что это хорошая иллюстрация того, как примерно достичь того, что вам нужно, в сети Docker.
Так как же вы можете сделать то, что показано в docker-compose.yml
выше?Я нашел это: https://success.docker.com/article/multiple-docker-networks
Подводя итог, вы можете подключить только одну сеть, используя docker run
, но вы можете использовать docker network connect <container> <network>
для подключения работающих контейнеров к большему количеству сетей после их запуска.
Порядок, в котором вы создаете сети, запускаете docker-compose up
или запускаете различные контейнеры в своем конвейере, зависит от вас.Вы можете создавать сети внутри docker-compose.yml
, если хотите, или использовать docker network create
и импортировать их в свой стек docker-compose
.Это зависит от того, как вы используете этот стек, и это определит порядок операций здесь.
Наверное правило, очевидно, состоит в том, что сети должны существовать до того, как вы попытаетесь присоединить их к контейнеру.,Самый простой конвейер может выглядеть как ..
docker-compose up
со всеми сетями, определенными в docker-compose.yml
для каждого контейнера приложения:
docker run
контейнер
docker network attach
нужные сети