Vad är containers?

Containers är ett effektivt sätt att snabba på utvecklingen och göra dig mindre beroende av underliggande infrastruktur.

Containers är en lösning på problemet med hur du får mjukvara att fungera på exakt samma sätt när du flyttar den mellan olika driftmiljöer. Det här kan vara från utvecklarens lokala dator till en testmiljö, från en testmiljö till produktion, och kanske från en fysisk server till en virtuell server i ett privat eller offentligt moln.

Om du någon gång jobbat med utveckling känner du säkert igen dig i problemet med att allt fungerar i testmiljön, men av någon anledning fungerar det inte i produktion, och allt för ofta visar det sig bero på att du utvecklade med den senaste versionen av PHP (eller Pyhthon, .NET eller vilket språk man nu än må använda sig av) i testmiljön, men hade en äldre version i produktion,

Och det är inte bara olika mjukvaror som kan orsaka problem. Nätverkstopologin kan vara annorlunda, eller säkerhetspolicy och lagring kan vara annorlunda, men mjukvaran måste ändå kunna köras på den.

Hur löser containers detta problem?

Enkelt förklarat består en container av en hel runtime-miljö: en applikation, samt alla dess beroenden som bibliotek, andra binärer och konfigurationsfiler, är paketerade i en container. På så vis har man genom att bygga in applikationsplattformen och dess beroende i en container, avlägsnat beroenden till operativsystem och underliggande infrastruktur.

Vad är skillnaden mellan en container och virtualisering?

Med virtualiseringsteknik blir själva lagret ovanpå hypervisorn en hel server som inkluderar både operativsystem och själva applikationen. Till exempel i ett fall där du har tre virtuella servrar skulle du i botten ha en hypervisor och tre separata operativsystem som körs ovanpå den.

Om du däremot använder dig av containermetoden så skulle en server som kör tre containeriserade applikationer med exempelvis Docker ha ett enda operativsystem, och varje container delar operativsystemkärnan med sina syskoncontainers. De delar av operativsystemet som delas mellan alla containers är read only för respektive container, medan varje container har sin egen mount (dvs. ett sätt att komma åt containern) för skrivning. Det betyder att containers är mycket lättare och använder mycket färre resurser än virtuella maskiner.