Futtatókörnyezet
1. Bevezetés¶
A Docker eredeti architektúrája egy monolitikus, nagy szoftver volt. Azonban az iparág fejlődése és a Kubernetes, valamint más konténer-rendszerezők megjelenése stratégiai döntésekhez vezetett. A Docker felismerte, hogy a monolitikus megközelítés korlátozza az innovációt és a szabványosítást, ezért az egységes motorját kisebb, moduláris komponensekre bontotta.
2. A Docker Engine felosztása¶
A modern Docker Engine architektúrája moduláris, és a következő fő komponensekből áll:
Docker Daemon (dockerd): A Docker daemon (dockerd) a magas szintű, felhasználói felülethez közelebb eső komponens. Figyeli a Docker API kéréseket, és kezeli a Docker objektumokat, mint az image-ek, container-ek, hálózatok és volume-ok.Containerd: A containerd a konténer életciklusának menedzsmentjét végzi. Ez a komponens felel az image-ek letöltéséért és tárolásáért, a hálózat beállításáért, és a konténer futtatásáért, amit a runc-re delegál.runc: A runc az alacsony szintű, univerzális konténer futtatókörnyezet. Ez az a komponens, amely közvetlenül kommunikál a Linux kernellel, hogy létrehozza és futtassa a konténereket. A runc a libcontainer refaktorálásával jött létre.
3. Az OCI specifikáció¶
A Docker kulcsfontosságú lépést tett a szabványosítás felé, amikor aktívan részt vett az Open Container Initiative (OCI) létrehozásában. Az OCI szabványokat határoz meg a konténerek futtatókörnyezetére és image-eire vonatkozóan.
Ez a döntés nem csak technológiai, hanem stratégiai jelentőséggel is bírt. Az runc és a containerd nyílt forrásúvá tételével a Docker lehetővé tette, hogy a konkurens technológiák, mint például a Kubernetes, az ő alapvető komponenseire épüljenek. Ez a lépés biztosította, hogy a Docker továbbra is releváns maradjon az iparágban, nem csupán mint egy build eszköz, hanem mint az egész konténer-ökoszisztéma architekturális alapköve.
4. Alternatív futtatókörnyezetek¶
A Docker moduláris architektúrája lehetővé teszi a felhasználók számára, hogy lecseréljék az alapértelmezett runc futtatókörnyezetet más, speciálisabb célú megoldásokra, amelyek a containerd shim API-t implementálják. Ilyenek például:
gVisor: A Google által fejlesztett gVisor egy alkalmazás kernel, amely egy további izolációs réteget biztosít a futó konténerek számára. Ez javítja a biztonságot, mivel a konténerek rendszerhívásait a gVisor kezeli, és nem a host kernel.Wasmtime: A Wasmtime egy WebAssembly (Wasm) futtatókörnyezet, amely lehetővé teszi a Wasm konténerek futtatását Dockerrel. Ez a megközelítés a konténer-izoláció mellett további sandboxing-ot (homokozó-szerű elszigetelést) biztosít.
| Komponens | Szerep | Funkció | Kommunikáció |
|---|---|---|---|
| Docker Client (CLI) | Felhasználói interfész | Parancsok küldése a Docker daemon-nak (dockerd), például docker run | REST API |
| Docker Daemon (dockerd) | Magas szintű menedzser | Docker objektumok (image-ek, konténerek, hálózatok) kezelése és API kérések fogadása | REST API (TCP vagy UNIX socketen keresztül) |
| Containerd | Köztes menedzser | Image letöltés és tárolás, konténer életciklus-kezelés (létrehozás, indítás, leállítás) | gRPC |
| runc | Alacsony szintű futtatókörnyezet | Közvetlen interakció a Linux kernellel a konténer futtatásáért az OCI specifikáció alapján | OCI specifikáció |