Docker Networking - Разгледайте как контейнерите комуникират помежду си



Научете всичко за мрежовите възможности на Docker с разбиране за Container Network Model и прилагането му с Hands-On.

В днешния свят предприятията са се запалили по контейнеризирането, което изисква силни мрежови умения, за да се конфигурира правилно архитектурата на контейнера и по този начин това въвежда концепцията за Docker Networking.

В този блог на Docker Networking ще преминете през следните теми:





Какво е Docker?

За да разберете Docker, трябва да знаете за историята на това как приложенията са били разположени преди и след това как приложенията се разполагат с помощта на контейнери сега.

Внедряване на приложения по стар начин и нов начин - Docker Networking - Edureka



Както можете да видите в горната диаграма, старият начин е имал приложения на хоста.Така че n брой приложения споделят библиотеките, присъстващи в тази операционна система.Но с контейнеризирането операционната система ще има ядро, което е единственото нещо, което ще бъде общо между всички приложения.Така че приложенията нямат достъп до библиотеките на другия.

Така, Докер с прости думи е отворена платформа за разработване, доставка и стартиране на приложения, позволяваща на потребителя да отделя приложенията от инфраструктурите с помощта на контейнери за бърза доставка на софтуер.

И така, как тези контейнери комуникират помежду си в различни ситуации?



Е, това идва чрез Docker Networking.

как да използвам пакети в java -

Докер мрежа

Преди да се задълбоча в Docker Networking, позволете ми да ви покажа работния процес на Docker.

Както можете да видите на горната схема. Разработчик пише код, който определя изискванията на приложението или зависимостите в лесен за запис Docker файл и този Docker файл създава Docker изображения. Така че, каквито и зависимости да са необходими за конкретно приложение, присъстват в това изображение.

Сега контейнерите на Docker не са нищо друго освен екземпляр от времето за изпълнение на Docker Image. Тези изображения се качват в Docker Hub (Git хранилище за Docker Images), който съдържа публични / частни хранилища.

И така, от публичните хранилища можете да изтеглите и вашето изображение и да качите свои собствени изображения в Docker Hub. След това от Docker Hub различни екипи като екипи за осигуряване на качеството или производствени екипи ще изтеглят това изображение и ще подготвят свои собствени контейнери. Тези отделни контейнери комуникират помежду си чрез мрежа, за да извършват необходимите действия и това не е нищо друго освен Docker Networking.

Така че, можете да определите Docker Networking като комуникационен канал, през който всички изолирани контейнери комуникират помежду си в различни ситуации, за да извършат необходимите действия.

Какви според вас са целите на Docker Networking?

Цели на Docker Networking

Гъвкавост - Docker осигурява гъвкавост, като дава възможност на произволен брой приложения на различни платформи да комуникират помежду си.

Крос-платформа - Docker може лесно да се използва в различни платформи, които работят на различни сървъри с помощта на Docker Swarm Clusters.

Мащабируемост - Docker е напълно разпределена мрежа, която позволява на приложенията да се разрастват и мащабират индивидуално, като същевременно осигуряват производителност.

Децентрализиран - Docker използва децентрализирана мрежа, която дава възможност на приложенията да бъдат широко разпространени и достъпни. В случай, че контейнер или хост внезапно липсват в пула ви ресурси, можете или да изведете допълнителен ресурс, или да преминете към услуги, които все още са на разположение.

Удобен за потребителя - Docker улеснява автоматизирането на внедряването на услуги, което ги прави лесни за използване в ежедневния живот.

поддържа - Docker предлага готови опори. Така че възможността да използвате Docker Enterprise Edition и да получите цялата функционалност много лесна и ясна, прави платформата на Docker много лесна за използване.

За да активирате горните цели, се нуждаете от нещо, известно като Модел на контейнерна мрежа.

Искате ли да разгледате различни етапи на DevOps?

Модел на контейнерна мрежа (CNM)

Преди да ви кажа какво точно представлява Container Network Model, позволете ми да ви разкажа за Libnetwork, който е необходим, преди да разберете CNM.

Libnetwork е библиотека на Docker с отворен код, която изпълнява всички ключови концепции, съставляващи CNM.

Така, Модел на контейнерна мрежа (CNM) стандартизира стъпките, необходими за осигуряване на мрежа за контейнери, използващи множество мрежови драйвери. CNM изисква разпределено съхранение на ключ-стойност като конзола за съхраняване на мрежовата конфигурация.

CNM има интерфейси за IPAM плъгини и мрежови плъгини.

Приложните програмни интерфейси (API) на IPAM се използват за създаване / изтриване на пулове от адреси и разпределяне / освобождаване на IP адреси на контейнери, докато API на мрежовите приставки се използват за създаване / изтриване на мрежи и добавяне / премахване на контейнери от мрежи.

CNM е изградил основно 5 обекта: мрежов контролер, драйвер, мрежа, крайна точка и пясъчник.

Обект на модел на контейнерна мрежа

Мрежов контролер: Осигурява входна точка в Libnetwork, която излага прости API за Docker Engine за разпределяне и управление на мрежи. Тъй като Libnetwork поддържа множество вградени и отдалечени драйвери, Network Controller позволява на потребителите да прикачат определен драйвер към дадена мрежа.

Шофьор: Притежава мрежата и е отговорен за управлението на мрежата, като участва множество драйвери, които отговарят на различни случаи на употреба и сценарии за внедряване.

Мрежа: Осигурява свързаност между група крайни точки, които принадлежат към една и съща мрежа и се изолират от останалите. Така че, когато се създаде или актуализира мрежа, съответният драйвер ще бъде уведомен за събитието.

Крайна точка: Осигурява свързаност за услуги, изложени от контейнер в мрежа с други услуги, предоставени от други контейнери в мрежата. Крайна точка представлява услуга и не е задължително конкретен контейнер, крайната точка има и глобален обхват в рамките на клъстер.

Пясъчник: Създаден, когато потребителите поискат да създадат крайна точка в мрежа. Sandbox може да има множество крайни точки, свързани към различни мрежи, представляващи мрежовата конфигурация на контейнера, като IP-адрес, MAC-адрес, маршрути, DNS.

Това бяха 5-те основни обекта на CNM.

Сега, нека ви разкажа различните мрежови драйвери, участващи в мрежата на Docker.

Искате ли да преминете обучението DevOps на следващо ниво?

Мрежови драйвери

Има основно 5 мрежови драйвера: Bridge, Host, None, Overlay, Macvlan

Мост: Мостовата мрежа е частна вътрешна мрежа по подразбиране, създадена от докер на хоста. И така, всички контейнери получават вътрешен IP адрес и тези контейнери могат да имат достъп един до друг, използвайки този вътрешен IP. Bridge мрежите обикновено се използват, когато вашите приложения се изпълняват в самостоятелни контейнери, които трябва да комуникират.

Водещ : Този драйвер премахва мрежовата изолация между хоста на докера и контейнерите на докера, за да използва директно мрежата на хоста. Така че с това няма да можете да стартирате множество уеб контейнери на един и същ хост, на един и същ порт, тъй като портът вече е общ за всички контейнери в хост мрежата.

Нито един : В този вид мрежа контейнерите не са свързани към никоя мрежа и нямат достъп до външната мрежа или други контейнери. Така че, тази мрежа се използва, когатоискате напълно да деактивирате мрежовия стек на контейнер и,създайте само устройство с обратна връзка.

Наслагване : Създава вътрешна частна мрежа, която обхваща всички възли, участващи в роевия клъстер. Така че, Overlay мрежите улесняват комуникацията между роева услуга и самостоятелен контейнер, или между два самостоятелни контейнера на различни Docker Daemons.

Macvlan: Позволява ви да присвоите MAC адрес на контейнер, като го направите да се показва като физическо устройство във вашата мрежа. След това демонът на Docker насочва трафика към контейнери по техните MAC адреси. Шофьорът на Macvlan е най-добрият избор, когато се очаква да бъдете директно свързани с физическата мрежа, а не пренасочени през мрежовия стек на хоста на Docker.

Добре, това беше цялата теория, необходима за разбиране на Docker Networking. Сега нека да продължа и да ви покажа практически как се създават мрежите и контейнерите комуникират помежду си.

Практически

И така, с предположението, че всички вие сте инсталирали Docker на вашите системи, имам сценарий, който да покажа.

Да предположим, че искате да съхранявате име и идентификатор на курсове, за което ще ви трябва уеб приложение. По принцип имате нужда от един контейнер за уеб приложение и имате нужда от още един контейнер като MySQL за бекенда, този контейнер MySQL трябва да бъде свързан с контейнера за уеб приложения.

Какво ще кажете да изпълня горепосочения пример на практика.

Включени стъпки:

  • Инициализирайте Docker Swarm, за да образувате клъстер Swarm.
  • Създайте Overlay Network
  • Създайте услуги както за уеб приложения, така и за MySQL
  • Свържете приложенията през мрежата

Да започваме!

Етап 1: Инициализирайте Docker Swarm на машината.

docker swarm init --advertise-addr 192.168.56.101

Флагът –advertise-addr конфигурира възела на мениджъра да публикува адреса му като 192.168.56.101. Останалите възли в роя трябва да имат достъп до мениджъра на IP адреса.

Стъпка 2: Сега, ако искате да се присъедините към този мениджърски възел към работния възел, копирайте връзката, която получавате, когато инициализирате роя на работния възел.
Стъпка 3: Създайте насложена мрежа.

docker network create -d overlay myoverlaynetwork

Където myoverlay е името на мрежата и -d позволява на Docker Daemon да работи във фонов режим.

как да използвам набори в java -

Стъпка 4.1: Създайте услуга webapp1 и използвайте мрежата, която сте създали, за да разположите тази услуга над роевия клъстер.

докер услуга създаване - име webapp1 -d - мрежа myoverlaynetwork -p 8001: 80 hshar / webapp

Къде -pе за пренасочване на портове,hsharе името на акаунта в Docker Hub, а webapp е името на уеб приложението, което вече присъства в Docker Hub.

Стъпка 4.2: Сега проверете дали услугата е създадена или не.

какви са пространствата от имена в c ++
докер услуга ls

Стъпка 5.1: Сега създайте услуга MySQL и използвайте мрежата, която сте създали, за да разгърнете услугата над роевия клъстер.

докер услуга създаване - име mysql -d - мрежа myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Стъпка 5.2: Сега проверете дали услугата е създадена или не.

докер услуга ls

Стъпка 6.1: След това проверете кой контейнер работи на вашия главен възел и влезте в контейнера hshar / webapp.

докер ps

Стъпка 6.2: И така, можете да видите, че само услугата webapp е на възела на мениджъра. Така че, влезте в контейнера на webapp.

docker exec -it container_id bash nano var / www / html / index.php

Командата docker ps ще изброи и двата ви контейнера със съответния идентификатор на контейнера им. Втората команда ще активира този контейнер в интерактивен режим.

Стъпка 7: Сега променете $ servername от localhost на mysql и $ password от “” ”на“ edureka ”, а също така променете всички попълнете необходимите данни за базата данни и запазете файла index.php, като използвате клавишната комбинация Ctrl + x и след това y, за да запазите, и натиснете enter.

Стъпка 8: Сега отидете в контейнера mysql, който се изпълнява на друг възел.

docker exec -it container_id bash

Стъпка 9: След като влезете в контейнера на mysql, въведете командите по-долу, за да използвате базата данни в MySQL.

Стъпка 9.1: Получете достъп за използване на контейнера mysql.

mysql -u корен -pedureka

Където -u представлява потребителя, а -p е паролата на вашата машина.

Стъпка 9.2: Създайте база данни в mysql, която ще се използва за получаване на данни от webapp1.

СЪЗДАЙТЕ БАЗАТА ДАННИ HandsOn

Стъпка 9.3: Използвайте създадената база данни.

ИЗПОЛЗВАЙТЕ HandsOn

Стъпка 9.4: Създайте таблица в тази база данни, която ще се използва за получаване на данни от webapp1.

СЪЗДАВАНЕ НА ТАБЛИЦА подробности за_курс (име_на курс VARCHAR (10), курс_id VARCHAR (11))

Стъпка 9.5: Сега излезте от MySQL и контейнера, като използвате командата изход .

Стъпка 10: Отидете в браузъра си и въведете адреса като localhost: 8001 / index.php . Това ще отвори вашето уеб приложение. Сега въведете подробности за курсовете и кликнете върху Изпратете заявка .

Стъпка 11: След като щракнете върху Изпращане на заявка, отидете до възела, в който се изпълнява вашата услуга MySQL, и след това влезте в контейнера.

docker exec -it container_id bash mysql -u root -pedureka ИЗПОЛЗВАЙТЕ HandsOn SHOW таблици изберете * от course_details

Това ще ви покаже резултатите от всички курсове, за които сте попълнили подробностите.

Тук завършвам моя блог на Docker Networking. Надявам се да ви е харесал този пост. Можете да проверите други блогове в поредицата също, които се занимават с основите на Docker.

Ако сте намерили този блог на Docker Container подходящ, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 450 000 доволни обучаеми, разпространени по целия свят. Курсът за обучение по сертифициране Edureka DevOps помага на обучаващите се да придобият опит в различни процеси и инструменти на DevOps като Puppet, Jenkins, Docker, Nagios, Ansible и GIT за автоматизиране на множество стъпки в SDLC.

Търсите сертификация в DevOps?

Имате въпрос към мен? Моля, споменете го в раздела за коментари и ще се свържа с вас.