Как докер управляет IP-адресами контейнеров?

При создании контейнеров внутри пользовательской мостовой сети без указания IP-адреса запущенным контейнерам присваиваются IP-адреса, начиная с начала диапазона IP-адресов. Когда контейнер выходит из строя, его IP-адрес снова становится доступным и позже может использоваться другим контейнером. Docker также обнаруживает повторяющиеся IP-адреса и создает исключения, когда предоставляются недопустимые адреса. Насколько я понимаю, демон docker не зависит от каких-либо служб DHCP. Так как же Docker на самом деле выясняет, какие IP-адреса используются/доступны для нового контейнера? Кроме того, как сетевой плагин Docker (например, docker-go-plugin) может сделать то же самое? вещь?

Я думаю, что одним из ключевых слов здесь является IPAM, но кроме этого я ничего не знаю. Я был бы признателен за каждую информацию, которая указывает мне правильное направление.


person turtle    schedule 06.06.2019    source источник


Ответы (1)


Докер — это сервис. Всякий раз, когда вы запускаете контейнер, он просит службу Docker выполнить всю необходимую работу. IP-адреса определяются всякий раз, когда вы создаете сеть докеров. Docker также может создавать новые сети, если вы этого не сделаете сами. Из того, что я видел, они используют IP-адреса в диапазоне 172.16.0.0 — 172.31.255.255. Это все частные IP-адреса. По умолчанию они начинаются с 172.19.0.0, насколько я видел. Вы также можете создавать свои собственные сети с любым диапазоном IP-адресов. Затем добавьте контейнеры в эту сеть, и будет использоваться следующий доступный IP-адрес. Всякий раз, когда вы уничтожаете контейнер, его IP-адрес снова становится доступным, поэтому служба Docker может повторно добавить его в этот список.

В этой документации Docker говорится, что вы можете считайте, что этот механизм похож на наличие DHCP, хотя служба Docker позаботится о назначениях.

Я не знаю, как это реализовано. Вероятно, список, хотя они могут использовать растровое изображение. Для 65536 IP-адресов ваша карта должна быть только 64 КБ / 8 = 8 КБ, поэтому она очень маленькая. Затем каждый бит сообщает вам, используется ли IP-адрес или нет. Однако, если они должны поддерживать IPv6, такая карта не будет практичной. Слишком большой. Они также могут проверить список существующих контейнеров и попытаться назначить наименьший возможный IP-адрес, который в настоящее время не используется.

person Alexis Wilke    schedule 07.03.2020