Containere og virtuelle maskiner
En webapplikasjon trenger mer enn kildekoden sin. Den kan også trenge Python, bestemte biblioteker og innstillinger. Hvis to applikasjoner trenger ulike versjoner av samme bibliotek, blir det vanskelig å installere alt i ett felles miljø.
Her skal du kunne forklare hvordan containere skiller applikasjoner fra hverandre, og hvordan containere kan kjøre inne i en virtuell maskin. Du trenger ingen ferdig server eller installasjon for å begynne.
Start med dette spørsmålet: Hvis to programmer kjører på samme fysiske server, må de da bruke samme operativsystem og de samme bibliotekene? Behold svaret ditt mens du leser figurene nedenfor.
Plass i fagstoffet: Denne siden forklarer containerisering som et generelt prinsipp. Operativsystemkjernen er forkunnskap; Docker er et verktøy som bruker prinsippet. Oversiktskartet viser relasjonene og hvor de ulike forklaringene hører hjemme.
Hva betyr containerisering?
Containerisering innebærer å pakke en applikasjon og avhengighetene dens slik at den kan kjøres som en isolert prosess. Pakken kalles et image. Når en container opprettes fra imaget, får den blant annet sitt eget filsystem og normalt et eget nettverksmiljø.
Programmet opplever derfor et avgrenset miljø, selv om det deler ressurser med andre programmer på serveren. Containeren kan ha andre biblioteker enn nabocontaineren.
Linux-containere deler operativsystemkjernen til Linux-systemet de kjører på. De har ikke hver sin kjerne. Kjernesiden forklarer hvordan kjernen håndterer prosesser, minne og tilgang til maskinvare.
VM og container isolerer på ulike nivåer
En virtuell maskin (VM) har virtuell CPU, minne og disk og kjører et gjesteoperativsystem med egen kjerne. En hypervisor fordeler den fysiske maskinens ressurser mellom VM-ene. Les mer i virtualiseringsforklaringen.
En container isolerer prosesser i et operativsystem. Den trenger ingen egen oppstart av en operativsystemkjerne. Imaget kan likevel inneholde mange av filene og bibliotekene fra en Linux-distribusjon.
| Spørsmål | Virtuell maskin | Linux-container |
|---|---|---|
| Har den egen operativsystemkjerne? | Ja. | Nei, den deler kjernen til Linux-systemet den kjører på. |
| Hva pakkes og administreres? | Et gjesteoperativsystem med programmer. | En applikasjon med filene og avhengighetene den trenger. |
| Kan du kombinere ulike kjerner? | Ja, for eksempel Windows og Linux i hver sin VM på en egnet hypervisor. | En Linux-container trenger en Linux-kjerne. |
| Når er det nyttig? | Når du trenger et helt operativsystem eller en egen grense rundt flere tjenester. | Når du vil kjøre og oppdatere applikasjoner i avgrensede miljøer. |
Isolasjon betyr ikke at feil aldri kan påvirke andre. Både VM-er og containere deler fysiske ressurser. En container er heller ikke en sikkerhetsgaranti; rettigheter, oppdateringer og konfigurasjon har betydning.
Du kan bruke begge deler samtidig
I dette eksemplet fordeler Proxmox ressursene til en Linux-VM. Inne i VM-en kjører et containerverktøy to applikasjoner. Containerne deler kjernen i Linux-VM-en. VM-en har sin egen kjerne, atskilt fra Proxmox-verten.
Docker og Podman er eksempler på verktøy for applikasjonscontainere. Proxmox tilbyr også LXC-systemcontainere. En LXC-container direkte på Proxmox deler Proxmox-vertens Linux-kjerne; den er en annen løsning enn en Docker-container inne i en VM.
Dette gjør det mulig å beholde VM-en som en egen administrasjonsgrense, samtidig som applikasjoner kan opprettes og oppdateres som containere.
Hva løser containerisering, og hva må du fortsatt passe på?
Et image samler applikasjonen og avhengighetene. Det gjør det lettere å bruke samme pakke i utvikling, testing og drift. Målmaskinen må fortsatt ha en kompatibel kjerne og CPU-arkitektur, eller støtte som håndterer forskjellene.
Du må også bestemme hvordan applikasjonen får innstillinger, nettverk og varig lagring. Filer i containerens skrivbare lag forsvinner når containeren fjernes. Viktige data trenger lagring utenfor dette laget og en plan for sikkerhetskopiering.
Prøv forklaringen din
Se på figuren med Proxmox og svar muntlig eller skriftlig:
- Hvilken operativsystemkjerne deler de to containerne?
- Hvis du vil kjøre en Windows-server ved siden av Linux-serveren, hvor i figuren legger du den?
- Hva skjer med containerne i VM-en hvis hele VM-en slås av?
Kontroller svaret: Containerne deler Linux-VM-ens kjerne. Windows kan kjøre i en separat VM under Proxmox, med sin egen kjerne. Slår du av Linux-VM-en, stopper også containerne som kjører i den.
Du er klar til å gå videre når du kan peke ut fysisk vert, VM, kjerne og container og forklare hva de deler. Hvis du blander nivåene, følg figurene nedenfra og opp og prøv igjen. Vil du undersøke mer, forklar hvorfor LXC direkte på Proxmox deler en annen kjerne enn Docker-containerne i eksemplet.
Videre
- Docker Level 0 viser hvordan Docker bruker image, register og containere.
- Serverinstallasjon i Proxmox viser hvordan du oppretter VM-en i praksis.
- Virtualiseringsoppgaven lar deg dokumentere og begrunne en egen løsning.
Kilder: Docker: containere og VM-er og Proxmox: Linux-containere. Illustrasjonene er tegnet for denne ressursen.