‫Vereisten voor deze lezing zijn dat je de vorige netwerkcolleges hebt gezien en kennis hebt van
‫de belangrijkste concepten voor Docker-netwerken en de bijbehorende commando's.
‫Oke.
‫En in deze lezing ga je leren en spelen met DNS en hoe het containers in aangepaste
‫netwerken en standaardnetwerken beïnvloedt.
‫We gaan
‫snel bespreken hoe belangrijk het is dat we een goede DNS hebben, omdat je niet kunt vertrouwen op IP-adressen
‫in containers omdat de dingen zo dynamisch zijn. We zullen kijken naar de verschillen tussen standaard- en aangepaste netwerken
‫met betrekking tot hoe ze omgaan met DNS.
‫En dan bekijken we de --link optie voor container run voor het inschakelen van DNS op het
‫standaard bridge-netwerk.
‫Dus er is nog één ding dat cruciaal is voor al deze containers en virtuele netwerken
‫en ze met elkaar praten; en dat is naamgeving. Want in de wereld van containers die voortdurend lanceren en
‫verdwijnen en bewegen en uitbreiden en krimpen, en al het mooie van deze microservices die we overal
‫zien opduiken, is dat we niet langer gemakkelijk kunnen vertrouwen op IP-adressen als de manier om te praten van
‫het een naar het ander. Want we kunnen er niet van minuut tot minuut van uitgaan dat
‫de IP-adressen zelfs maar hetzelfde zullen zijn.
‫De container kan verdwijnen of het kan mislukken en dan brengt Docker het ergens anders naar voren.
‫Het is gewoon te dynamisch en te ingewikkeld om daarmee om te gaan.
‫Het blijkt dus dat hier een ingebouwde oplossing voor is, en dat is DNS-naamgeving. Docker gebruikt de containernamen als het
‫equivalent van een hostnaam voor containers die met elkaar praten.
‫Als je je herinnert dat we net twee containers hadden lopen...
‫als je je herinnert dat de Nginx zich op een nieuw netwerk bevond, genaamd my_app_net.
‫Rechts.
‫En heeft die ene container erop. Omdat ik dit nieuwe netwerk heb
‫gemaakt, dat niet het
‫standaard bridge-netwerk is, krijgt het eigenlijk een speciale nieuwe functie, namelijk automatische DNS-omzetting voor alle containers op dat virtuele
‫netwerk van alle andere containers op dat virtuele netwerk met behulp van hun containernamen.
‫Als ik een tweede container op dat virtuele netwerk zou maken, kunnen ze elkaar vinden, ongeacht
‫wat het IP-adres is, met hun containernamen.
‫Dus laten we dit proberen: de naam van de docker-container ... en we zullen het mijn nginx noemen... en we gaan het
‫netwerk specificeren als mijn app-net
‫van de nginx-afbeelding.
‫Als we nu naar dat netwerk kijken, zouden we 2 containers moeten zien; en, als ik een docker-containerexec
‫doe, vanuit de nieuwe container die ik zojuist heb gemaakt -- oeps, we hebben daar
‫ook de IT nodig -- en we doen een ping naar de
‫nieuwe nginx, je merkt dat DNS-resolutie gewoon werkt. Dit maakt het supergemakkelijk voor je om één container te
‫hebben en je moet er een configuratiebestand in zetten om mee te praten, laten we zeggen
‫dat de PHP-server zal praten met de MySQL-backend. Ctrl-c eruit, en je zult zien dat het ook andersom werkt.
‫Als ik in de nieuwe nginx-container spring en ik probeer mijn ngnix te pingen, zie je dat de resolutie in beide
‫richtingen werkt.
‫En dit is wat een enorm probleem oplost als je containers laat draaien, omdat je niet kunt
‫voorspellen hoe lang ze meegaan en waar ze over een minuut kunnen zijn in een
‫productieontwerp waar je een cluster van Docker Swarm-servers.
‫Het kan dus niet veel veranderen op uw lokale computer, maar als u 3 of 4 containers
‫stopt, en dan dezelfde containers start, en u start ze in een
‫andere volgorde, hebben ze misschien niet hetzelfde IP-adres. Maar hun hostnamen, of hun containernamen, zullen altijd
‫hetzelfde zijn.
‫En dus kunt u op hen vertrouwen.
‫Nu moet ik opmerken dat als we een docker-netwerklijst maken, het standaard bridge-netwerk hier één nadeel heeft.
‫Het heeft standaard geen DNS-server ingebouwd.
‫U kunt dus de --link gebruiken.
‫Dus wanneer u een container maakt, zult u merken dat er een koppelingsoptie is en dat u handmatige koppelingen
‫tussen containers in dat standaard bridge-netwerk kunt specificeren.
‫Maar echt, het is gewoon veel makkelijker om een nieuw netwerk voor je apps aan te maken, zodat je dit niet
‫elke keer hoeft te doen.
‫En in een toekomstig gedeelte, als we het hebben over Docker Compose, zul je zien hoe
‫veel hiervan nog eenvoudiger wordt, omdat Compose automatisch nieuwe virtuele netwerken maakt wanneer je er een app mee opstart.
‫Zo wordt communiceren tussen uw containers nog eenvoudiger.
‫Als een korte samenvatting hebben we in deze lezing besproken hoe containers niet echt kunnen of zouden moeten vertrouwen op IP-adressen
‫om met elkaar te praten, omdat er gewoon niet op kan worden vertrouwd.
‫En die DNS is hier echt de standaard voor hoe we communiceren tussen containers
‫op dezelfde host en tussen hosts.
‫En dus raadde ik je aan om altijd aangepaste netwerken te maken, omdat het op die manier gewoon makkelijker is dan
‫de hele tijd een --link te doen.
‫En toen gaf ik je een teaser over Docker Compose en hoe het dit allemaal gemakkelijker
‫gaat maken, vooral het netwerken.