Hoppa till innehåll

Docker

Ett verktyg som paketerar ett program med allt det behöver i en container, så att det körs likadant på olika datorer.

Kategorier
InfrastrukturUtvecklingsflöde

Enkel förklaring

Ett program behöver ofta mycket annat för att fungera: rätt version av programspråket, rätt inställningar och färdiga kodpaket som andra har skrivit. På en annan dator kan något av det saknas eller ha fel version, och då fungerar programmet inte.

Docker löser det genom att paketera programmet tillsammans med allt det behöver i en container, ungefär som en fraktcontainer som ser likadan ut vilket fartyg den än står på. Containern fungerar likadant på utvecklarens dator och på servern.

Teknisk förklaring

Docker skiljer på två saker:

  • en image: en skrivskyddad mall som beskriver vad containern ska innehålla
  • en container: en körande instans av en image

En container är en isolerad process: den ser sina egna filer och sitt eget nätverk, men delar operativsystemets kärna med datorn den körs på. En virtuell maskin har däremot ett helt eget operativsystem med egen kärna. Det gör containrar lättare och snabbare att starta.

Med Docker Compose beskriver man flera containrar som hör ihop, till exempel ett program och dess databas, i en fil.

Praktiskt exempel

Flera av Kodkollektivets tjänster körs i Docker-containrar på servern, bland annat chatten, videomötena, kalendern och kundportalen. Varje tjänst består av flera containrar, till exempel en för själva programmet och en för databasen.

Containrarna för en tjänst beskrivs i en Compose-fil. Ska en tjänst uppdateras byts dess image mot en ny version, och containrarna startas om. De andra tjänsterna på servern påverkas inte.

När och varför används det?

Docker används när ett program ska köras likadant på flera ställen, när man vill köra flera tjänster på samma server utan att de stör varandra, och för att starta en ren miljö för tester.

Rekommendation:

  • Ange exakta versioner av de images du använder, så att samma container byggs varje gång.
  • Behandla inte containern som en säkerhetsgräns. Behövs stark isolering, använd en virtuell maskin.

Vanliga missförstånd

  • “En container är en virtuell maskin.” Nej. En container delar kärnan med värddatorn. En virtuell maskin har en egen.
  • “En container är helt avskild från resten av datorn.” Inte nödvändigtvis. Den som styr Docker på en dator kan i praktiken styra hela datorn. När starkare isolering behövs används därför ofta virtuella maskiner.
  • “Docker är det enda sättet att köra containrar.” Nej. Det finns andra verktyg, till exempel Podman, som använder samma standardformat.

Relaterade begrepp