Разница между --link и --alias в оверлейной сети?
Я читаю эту официальную документацию по Docker 0.10.3 (на данный момент она все еще находится в ветке) и там написано:
--net-alias=ALIAS
В дополнение к --name, как описано выше, контейнер обнаруживается одним или несколькими из его настроенных --net-alias (или --alias в команде сетевого подключения docker) в определенной пользователем сети. Встроенный DNS-сервер поддерживает сопоставление всех псевдонимов контейнера и его IP-адреса в определенной пользователем сети. Контейнер может иметь разные псевдонимы в разных сетях, используя параметр --alias в команде docker network connect.
--link=CONTAINER_NAME:ALIAS
Использование этой опции при запуске контейнера дает встроенному DNS дополнительную запись с именем ALIAS, которая указывает на IP-адрес контейнера, идентифицированного CONTAINER_NAME. При использовании --link встроенный DNS гарантирует, что результат локализованного поиска будет только в том контейнере, где используется --link. Это позволяет процессам внутри нового контейнера подключаться к контейнеру без необходимости знать его имя или IP-адрес.
Является ли сетевой псевдоним одного контейнера ссылкой на второй контейнер в той же сети?
1 ответ
Есть два различия между --net-alias
а также --link
:
- С
--net-alias
один контейнер может получить доступ к другому контейнеру, только если они находятся в одной сети. Другими словами, в дополнение к--net-alias foo
а также--net-alias bar
нужно запустить оба контейнера с--net foobar_net
после создания сети сdocker network create foobar_net
, - С
--net-alias foo
все контейнеры в одной сети могут получить доступ к контейнеру, используя его псевдонимfoo
, С--link
только связанный контейнер может достичь контейнера, используя имяfoo
,
Исторически, --link
был создан раньше libnetwork
и все функции, связанные с сетью. До libnetwork
все контейнеры работали в одной сети bridge
, а также --link
только добавленные имена /etc/hosts
, Затем были добавлены пользовательские сети и поведение --link
в пользовательских сетях было изменено.
См. Также ссылки на устаревшие контейнеры для получения дополнительной информации о --link
,
--ссылка на сайт:
сотрудничающие контейнеры могут быть связаны вместе, чтобы предлагать сложные и ориентированные на бизнес услуги. Связанные контейнеры имеют вид отношения источник-получатель, в котором контейнер-источник связывается с контейнером-получателем, а получатель безопасно получает различную информацию из контейнера-источника. Однако исходный контейнер ничего не будет знать о получателях, с которыми он связан. Еще одна примечательная особенность связывания контейнеров в защищенной настройке заключается в том, что связанные контейнеры могут связываться через защищенные туннели, не подвергая порты, используемые для настройки, внешнему миру, и это подкоманда
--link <container>:<alias>
<container>
имя контейнера источника и имя, видимое контейнером получателя. Имя контейнера должно быть уникальным на хосте Docker, тогда как псевдоним является очень специфичным и локальным для контейнера получателя, и, следовательно, псевдоним не обязательно должен быть уникальным для хоста Docker. Это дает большую гибкость в реализации и включении функций с фиксированным псевдонимом источника в контейнере получателя.<alias>
***NOTE***
Когда два контейнера связаны друг с другом, механизм Docker автоматически экспортирует несколько переменных среды в контейнер получателя. Эти переменные среды имеют четко определенное соглашение об именах, где переменные всегда начинаются с префикса заглавной буквы имени псевдонима. Например, если src
является псевдонимом, данным для исходного контейнера, тогда экспортируемые переменные среды будут начинаться сSRC_
, Docker экспортирует три категории переменных среды, перечисленные здесь:
NAME
Это первая категория переменных среды. Эта переменная принимает форму <ALIAS>_NAME
и он несет иерархическое имя контейнера получателя в качестве значения. Например, если псевдоним контейнера источника - src, а имя контейнера получателя - rec
тогда переменная окружения и ее значение будут SRC_NAME=/rec/src
,
ENV
Это вторая категория переменных среды. Эти переменные экспортируют переменные среды, настроенные в исходном контейнере с помощью параметра -e подкоманды docker run или ENV
инструкция Dockerfile. Этот тип переменной среды принимает форму <ALIAS>_ENV_<VAR_
NAME>
, Например, если псевдоним контейнера источника src
и имя переменной SAMPLE
тогда переменная окружения будет SRC_ENV_SAMPLE
,
PORT
Это последняя и третья категория переменных среды, которая используется для экспорта сведений о подключении исходного контейнера получателю. Docker создает набор переменных для каждого порта, доступного для контейнера-источника, с помощью опции -p подкоманды docker run или инструкции EXPOSE в Dockerfile.
--net псевдоним:
Представьте себе случай, когда у вас есть несколько контейнеров, выполняющих обязанности веб-сервера, и вы хотите дать им одно и то же имя в сети (например, для балансировки нагрузки).