Kihagyás

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:

  1. 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.
  2. 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.
  3. 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ó