Låt oss utforska Docker-strukturen och de centrala delarna den består av.
Jag utgår från att du har grundläggande kunskaper om Docker. Om inte, rekommenderar jag att du läser en tidigare publicerad artikel i ämnet.
Det är antagligen tydligt för dig vilken betydelse Docker har inom DevOps. Men bakom detta effektiva verktyg måste det finnas en genomtänkt och robust arkitektur, eller hur?
Men innan jag går in på detaljer, låt mig ge en kort jämförelse mellan tidigare och nuvarande virtualiseringstekniker.
Traditionell kontra modern virtualisering
Tidigare var det vanligt att skapa virtuella maskiner, där varje enskild maskin behövde ett eget operativsystem. Det tog upp mycket resurser och gjorde dem tunga.
I Docker-containrar däremot, används ett delat operativsystem där resurserna fördelas mellan behållarna. Detta gör dem betydligt lättare och snabbare att starta.
Docker-struktur
Här följer en förenklad illustration av Docker-strukturen.
Låt mig förklara komponenterna som ingår i en Docker-struktur.
Docker Engine
Detta är kärnan i hela Docker-systemet. Docker Engine är en applikation som bygger på klient-server-modellen och installeras på värddatorn. Den består av tre huvuddelar:
- Server: Det här är Docker-demonen, även kallad dockerd. Den hanterar skapande och underhåll av Docker-avbilder, containrar, nätverk och andra resurser.
- Rest API: Detta används för att ge instruktioner till Docker-demonen om vad som ska göras.
- Kommandoradsgränssnitt (CLI): En klientapplikation som används för att ange kommandon till Docker.
Docker-klient
Docker-användare interagerar med Docker via en klient. När kommandon exekveras, skickar klienten dem till dockerd-demonen, som utför instruktionerna. Docker API:et används av klienten för att kommunicera. En Docker-klient kan kommunicera med flera demoner.
Docker-register
Detta är den plats där Docker-avbilder lagras. Det kan vara ett publikt register, eller ett privat. Docker Hub är standardplatsen, ett publikt register, för Docker-avbilder. Du kan även skapa och driva ditt eget privata register.
När du använder `docker pull` eller `docker run` hämtas den nödvändiga Docker-avbildningen från det konfigurerade registret. Med kommandot `docker push` sparas Docker-avbildningen i det konfigurerade registret.
Docker-objekt
När du arbetar med Docker använder du olika objekt som avbilder, containrar, volymer och nätverk.
Avbilder
Docker-avbilder är skrivskyddade mallar med instruktioner för att skapa en Docker-container. De kan hämtas från ett Docker-nav och användas direkt, eller så kan du lägga till egna instruktioner till en basavbildning för att skapa en ny, anpassad Docker-avbildning. Du kan också skapa dina egna avbilder med hjälp av en Dockerfile. En Dockerfile innehåller alla instruktioner för att skapa och köra en container, och därmed skapa din anpassade avbildning.
En Docker-avbildning har ett grundlager som är skrivskyddat, och ett översta lager som är skrivbart. När du ändrar en Dockerfile och bygger om avbildningen, byggs endast de modifierade delarna om i det översta lagret.
Containrar
När du startar en Docker-avbildning skapas en Docker-container. Alla applikationer och deras miljöer körs inuti denna container. Du kan använda Docker API eller CLI för att starta, stoppa och ta bort en Docker-container.
Här är ett exempel på kommandot för att köra en Ubuntu Docker-container:
docker run -i -t ubuntu /bin/bash
Volymer
Den bestående data som genereras av Docker och används av Docker-containrar lagras i volymer. De hanteras helt av Docker genom CLI eller API. Volymer fungerar både för Windows- och Linux-containrar. Istället för att lagra data i containerns skrivbara lager, är det alltid en bra idé att använda volymer. Volymens innehåll finns kvar utanför en containers livscykel, vilket gör att volymer inte ökar containerns storlek.
Du kan använda flaggan `-v` eller `-mount` för att starta en container med en volym. I det här exemplet används `geekvolume` tillsammans med containern `adminvista.com`.
docker run -d --name adminvista.com -v geekvolume:/app nginx:latest
Nätverk
Docker-nätverk fungerar som en kanal genom vilken isolerade containrar kommunicerar. Det finns fem huvudtyper av nätverksdrivrutiner i Docker:
- Bridge: Detta är standarddrivrutinen för en container. Du använder den när din applikation körs i fristående containrar som kommunicerar inom samma Docker-värd.
- Host: Denna drivrutin tar bort nätverksisoleringen mellan Docker-containern och Docker-värden. Det används när du inte behöver någon isolering mellan värd och container.
- Overlay: Denna typ av nätverk tillåter swarm-tjänster att kommunicera med varandra. Det används när containrar körs på olika Docker-värdar, eller när swarm-tjänster bildas av flera applikationer.
- None: Den här drivrutinen inaktiverar all nätverksanslutning.
- macvlan: Denna drivrutin tilldelar MAC-adresser till containrar för att få dem att verka som fysiska enheter. Trafiken dirigeras mellan containrar genom deras MAC-adresser. Används när containrar ska efterlikna fysiska enheter, till exempel vid migrering av en VM-installation.
Sammanfattning
Jag hoppas att detta ger dig en bra översikt över Docker-strukturen och dess viktiga delar. Utforska Docker för att lära dig mer. Om du är intresserad av praktisk utbildning, kolla in den här Docker Mastery-kursen.
Tyckte du om artikeln? Dela den gärna med andra!