På operativsystemnivå är en container en process som begränsas av två Linux-primitiver. Namnrymder och kontrollgrupper. Namnrymder isolerar vad processen kan se. Dess filsystemsvy, nätverksgränssnitt, värdnamn och processträd. Kontrollgrupper (cgroups) begränsar hur mycket CPU, minne och I/O processen får använda. Docker samlar dessa kärnfunktioner bakom ett utvecklarvänligt verktyg, men det är dessa primitiver som faktiskt skapar isoleringen.
Den distinktionen är viktig när man resonerar om säkerhet. En container är inte en virtuell maskin. Den delar värdkärnan. Om kärnan har en sårbarhet som en containerprocess kan nå kan isoleringen brytas. Det är därför kärnversion, containerkörningskonfiguration och arbetslaststilägg alla påverkar säkerhetsläget för ett containeriserat system.
Reproducerbarhet är den andra centrala fördelen. En image fångar inte bara applikationskod utan exakta versioner av systembibliotek, konfiguration och verktyg som koden är beroende av. Att flytta den imagen från en utvecklares dator till test och produktion ändrar bara körtidskontexten, inte programvaran. Det gör miljöer lättare att resonera om och problem lättare att återskapa.
Docker-arkitekturen skiljer på imagen (en skrivskyddad, lagerbaserad ritning) och containern (en körande instans med ett skrivbart toppskikt). Flera containrar kan köra från samma image samtidigt utan att störa varandras filtillstånd, och att stoppa en container lämnar imagen intakt för nästa körning.