Я новичок в докере, и я докционировал все свое приложение на одном сервере. Пока все хорошо и работает. Однако я ничего не понимаю. Я использую docker-compose для всего (я еще не создал файл докеров для моих проектов), и есть атрибут ports
в docker-compose. Если я пишу что-то вроде этого:сделать перезагрузку IP-порта док-станции?
ports:
8085:80
Он будет слушать 0.0.0.0:8085, что означает внешний мир имеет доступ к моему серверу. После некоторых дискуссий и Google-ING, я обнаружил, что я могу взять IP-адрес в моей сети Docker моста и делать сопоставление портов легко:
ports:
172.17.0.1:8085:80
Это будет слушать только на 172.17.0.1:8085, который является большим, как он только слушает внутри, а мой nginx проксирует трафик на необходимые порты. (например, proxy_pass http://172.17.0.1:8085
). Узнав больше о докере и понимая, как они работают, я понял, что все эти контейнеры имеют свои собственные IP-адреса с портами, открытыми только для этих адресов. Например, один из моих «веб-контейнеров» имеет IPv4-адрес 172.17.0.10, а порт 80 выставлен. Если я сделаю docker inspect
в одном из этих контейнеров, я увижу IP-адрес контейнера.
Теперь я хочу использовать эти IP-адреса в своем nginx. Вместо proxy_pass http://172.17.0.1:8085
, я хочу сделать http://172.17.0.10
. Я лично считаю, что это очень элегантный интерфейс, но есть одна вещь, которая касается меня. Что произойдет, если я перезапущу свою машину? Все контейнеры начнутся в каком-то порядке. Если у меня есть 5 веб-контейнеров и они начинаются в произвольном порядке, могу ли я быть уверенным, что IP-адреса для этих контейнеров будут одинаковыми? Или они изменятся? Должен ли я всегда использовать ports
в docker-compose для использования nginx? Если да, как я могу использовать разные IP-адреса для каждого контейнера вместо разных портов с одним и тем же IP-адресом? Будет ли хорошо, если я создам другой сетевой интерфейс докеры (скажем, в подсети 172.17.1.0) и назначат разные IP-адреса этого интерфейса для открытых «открытых» портов? Под этим я подразумеваю в основном использование 172.17.1.1:80:80
в одном контейнере, 172.17.1.2:80:80
в другом и т. Д.