La oss utforske Docker-strukturen og de viktige delene den består av.
Det forutsettes at du har en grunnleggende forståelse av hva Docker er. Hvis ikke, kan du se en tidligere artikkel om temaet.
Jeg er overbevist om at du forstår viktigheten Docker har i DevOps-miljøer. Bak dette nyttige verktøyet må det ligge en gjennomtenkt og solid arkitektur, ikke sant?
Før jeg går nærmere inn på dette, vil jeg gjerne vise deg hvordan virtualiseringssystemer har utviklet seg fra tidligere løsninger til dagens.
Tradisjonell vs. moderne virtualisering
Tidligere var det vanlig å opprette virtuelle maskiner (VM), der hver enkelt VM hadde sitt eget operativsystem, noe som krevde mye plass og ressurser.
I Docker-konteinere derimot, har man et enkelt operativsystem som deler ressurser mellom konteinerne. Dette gjør dem lette og raske å starte opp.
Docker-arkitektur
Her ser du en enkel oversikt over hvordan en Docker-arkitektur er satt sammen.
La meg gå gjennom de forskjellige delene i en Docker-arkitektur:
Docker Engine
Dette er selve kjernen i Docker-systemet. Docker Engine er en applikasjon som følger en klient-server arkitektur, og den er installert på vertmaskinen. Docker Engine består av tre hovedkomponenter:
- Server: Dette er Docker-demonen, kjent som «dockerd». Den har ansvaret for å lage og håndtere Docker-bilder, konteinere, nettverk, og mer.
- REST API: Dette grensesnittet brukes til å sende instruksjoner til Docker-demonen om hva den skal utføre.
- Kommandolinjegrensesnitt (CLI): Dette er klienten som brukes til å skrive inn Docker-kommandoer.
Docker-klient
Docker-brukere interagerer med Docker gjennom denne klienten. Når en Docker-kommando utføres, sender klienten den til «dockerd»-demonen, som igjen utfører kommandoen. Docker-kommandoene benytter seg av Docker API. En Docker-klient kan kommunisere med flere demoner.
Docker-registre
Dette er stedet der Docker-bilder er lagret. Det finnes både offentlige og private registre. Docker Hub er det vanligste offentlige registeret for Docker-bilder. Du har også mulighet til å sette opp og bruke ditt eget private register.
Når du kjører «docker pull» eller «docker run»-kommandoer, vil det nødvendige Docker-bildet hentes fra det konfigurerte registeret. Omvendt, når du bruker «docker push»-kommandoen, blir Docker-bildet lagret i det konfigurerte registeret.
Docker-objekter
Når du jobber med Docker, vil du støte på konsepter som bilder, konteinere, volumer og nettverk – alle disse er definert som Docker-objekter.
Bilder
Docker-bilder er statiske maler som inneholder instruksjoner for å opprette en Docker-konteiner. Du kan hente et eksisterende Docker-bilde fra en Docker Hub og bruke det som det er, eller du kan legge til nye instruksjoner for å tilpasse det. Det er også mulig å lage dine egne Docker-bilder ved å bruke en Dockerfile. Denne filen inneholder alle nødvendige instruksjoner for å lage og kjøre en konteiner, som igjen skaper et tilpasset Docker-bilde.
Et Docker-bilde består av et skrivebeskyttet basislag og et overliggende, skrivbart lag. Når du endrer en Dockerfile og bygger den på nytt, vil kun de modifiserte delene bli gjenoppbygget i det øverste laget.
Konteinere
Når du kjører et Docker-bilde, opprettes en Docker-konteiner. Inne i denne konteineren kjører alle applikasjonene og deres miljø. Du kan starte, stoppe eller slette en Docker-konteiner ved hjelp av Docker API eller CLI.
Her er et eksempel på en kommando for å kjøre en Ubuntu Docker-konteiner:
docker run -i -t ubuntu /bin/bash
Volumer
Dataene som genereres og brukes av Docker-konteinere lagres i volumer. Volumene blir administrert av Docker via Docker CLI eller Docker API. Volumer fungerer like godt i Windows- og Linux-konteinere. Istedenfor å lagre data direkte i konteinerens skrivebare lag, er det alltid anbefalt å bruke volumer. Data i volumer eksisterer uavhengig av konteinerens livssyklus, og bruk av volumer øker ikke konteinerens størrelse.
Du kan bruke «-v» eller «-mount»-flagget for å starte en konteiner med et volum. I dette eksemplet benyttes volumet «geekvolume» med «tipsbilk.net»-konteineren:
docker run -d --name tipsbilk.net -v geekvolume:/app nginx:latest
Nettverk
Docker-nettverk er en mekanisme som muliggjør kommunikasjon mellom isolerte konteinere. Det finnes hovedsakelig fem typer nettverksdrivere i Docker:
- Bridge: Dette er standard nettverksdriver for en konteiner. Du bruker dette nettverket når applikasjonene dine kjører i frittstående konteinere som kommuniserer med den samme Docker-verten.
- Vert: Denne driveren fjerner nettverksisolasjonen mellom Docker-konteinerne og Docker-verten. Den er aktuell når du ikke trenger nettverksisolasjon mellom verten og konteineren.
- Overlegg: Dette nettverket muliggjør kommunikasjon mellom svermtjenester. Det brukes når konteinerne kjører på ulike Docker-verter, eller når svermtjenester dannes av flere applikasjoner.
- Ingen: Denne driveren deaktiverer all nettverkstilkobling.
- macvlan: Denne driveren tilordner en MAC-adresse til konteinerne, slik at de fremstår som fysiske enheter. Trafikken rutes mellom konteinerne gjennom deres MAC-adresser. Dette nettverket brukes når du vil at konteinerne skal fremstå som fysiske enheter, for eksempel ved migrering fra et VM-oppsett.
Konklusjon
Jeg håper dette har gitt deg et godt innblikk i Docker-arkitekturen og dens viktigste komponenter. Fortsett å utforske Docker for å lære mer. Hvis du er interessert i praktisk opplæring, anbefaler jeg dette Docker Mastery-kurset.
Synes du denne artikkelen var nyttig? Del den gjerne med andre!