Показать страницуИстория страницыСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Docker: Networking - работа с сетью ====== <callout icon="true" type="info" title="Материал основан на следующей статье:"> [[https://linux-notes.org/rabota-s-setju-networking-v-docker/]] </callout> ===== Общие сведения ===== Сетевая Docker подсистема подключается, используя драйверы. По умолчанию существует несколько драйверов которые обеспечивают основные сетевые функции: * **bridge:** Мост, — это сетевой драйвер по умолчанию. Бридж сеть используется, когда ваши приложения запускаются в автономных контейнерах, которые должны взаимодействовать между собой (Наглядный пример Nginx + MySQL). * **host:** Хост, — это сетевой драйвер для автономных контейнеров (удаленная сетевая изоляция между контейнером и Docker хостом). Данный драйвер доступен только для docker-swarm с поддержкой Docker 17.06 и выше. * **overlay/overlay2:** Оверлей (Наложенная сеть), — это сетевой драйвер для соединения несколько демонов Docker между собой и которые позволяют docker-swarm службам взаимодействовать друг с другом. Вы также можете использовать оверлейные сети для облегчения связи между docker-swarm и автономным контейнером или между двумя отдельными контейнерами на разных Docker демонах. Эта стратегия устраняет необходимость выполнения маршрутизации на уровне ОС между этими контейнерами. * **macvlan:** Маквлан,- это сетевой драйвер, который позволяют назначать MAC-адрес контейнеру, делая его отображаемым как физическое устройство в вашей сети. Docker демон направляет трафик на контейнеры по их MAC-адресам. Использование macvlan драйвера иногда является лучшим выбором при работе с устаревшими приложениями, которые ожидают, что они будут напрямую подключены к физической сети. * **none:** Нон,- это сетевой драйвер, который умеет отключать всю сеть для контейнеров. Обычно используется в сочетании с пользовательским сетевым драйвером. * **Network plugins:** Вы можете установить и использовать сторонние сетевые плагины с Docker контейнерами. Эти плагины доступны в Docker Store или у сторонних поставщиков услуг. ===== Где и что лучше использовать? ===== * Мост (**bridge**) лучше всего использовать для связи нескольких контейнеров на одном и том же Docker хосте. Можно юзать docker-compose и выбирать данную сеть для такой связки. * Хост (**host**) сети лучше всего юзать, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы. * Овердейная сеть (**overlay/overlay2**) или наложение сетей лучше всего заюзать, когда вам нужны контейнеры, работающие на разных Docker хостах для связи, или, когда несколько приложений работают вместе, используя docker-swarm. * Маквлан (**macvlan**) сети лучше всего использовать, когда вы переходите с VM/дедикейта на контейнеры или хотите, чтобы ваши контейнеры выглядели как физические хосты в вашей сети, каждый с уникальным MAC-адресом. * Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками. ===== Команды для работы с сетью ===== <accordion> <panel type="info" title="Просмотреть Network в Docker"> Чтобы проверить какие сети имеются, выполните следующую команду: <code bash>$ docker network ls</code> Где: * **//NETWORK ID//** — при создании сети, ей присваивается ID. Так это, собственно, идентификатор сети. * **//NAME//** — имя сети. Можно задать произвольное имя. * **//DRIVER//** — используемый драйвер для созданной сети. * **//SCOPE//** — где используется. </panel> <panel type="info" title="Создать Network в Docker"> Давайте создания сети выполните следующую команду: <code bash>$ docker network create --driver=bridge NAME_NETWORK</code> Где: * **//NAME_NETWORK//** — имя сети. Можно создавать **//bridge//**, **//overlay//**, **//host//**, **//none//** или **//кастомный network-инг//**. По дефолту, — создается **//мост//**. При создании сети можно задавать дополнительные параметры, с ними можно ознакомиться: <code bash>$ docker network create --help</code> </panel> <panel type="info" title="Подключить/Отключить контейнер(ы) к/от сети в Docker"> Чтобы законектить контейнер к сети, нужно выполнить следующую команду: <code bash>$ docker network connect YOUR_NETWORK YOUR_CONTAINER</code> Где: * **//YOUR_NETWORK//** — сеть. * **//YOUR_CONTAINER//** — контейнер. Для отключения служит обратная команда: <code bash>$ docker network disconnect YOUR_NETWORK YOUR_CONTAINER</code> </panel> <panel type="info" title="Инспектор Network в Docker"> Можно получить подробную информацию о той или иной сети, например: <code bash>$ docker network inspect NAME_NETWORK</code> Где: * **//NAME_NETWORK//** — имя сети. Так же, можно получить инфу со следующей команды: <code bash>$ docker info</code> </panel> <panel type="info" title="Удаление Network в Docker"> Для удаления сети служит следующая команда: <code bash>$ docker network rm YOUR_NETWORK</code> Или если нужно удалить все созданные сети, которые не используются: <code bash>$ docker network prune</code> </panel> </accordion>