Hogyan működik

Mi történik a docker run mögött?

A Docker elsőre varázslatnak tűnhet, pedig jól érthető építőkövekre épül. Vegyük végig a legfontosabb fogalmakat és a teljes architektúrát.

Alapfogalmak

A hat fogalom, amit érdemes ismerni

Ha ezeket megérted, a Docker 90%-át megértetted.

A sablon

Image (képfájl)

Csak olvasható sablon, amely tartalmazza az alkalmazást és minden függőségét. Rétegekből épül fel, és a Docker Hubon megosztható. Az image-ből készülnek a futó konténerek.

A futó példány

Container (konténer)

Egy image futó példánya — izolált folyamat a saját fájlrendszerével, hálózatával és erőforrásaival. Egy image-ből akárhány konténert indíthatsz.

A recept

Dockerfile

Szöveges fájl, amely lépésről lépésre leírja, hogyan épüljön fel az image: milyen alapból indul, mit másol be, milyen parancsot futtat induláskor.

A motor

Docker Engine

A háttérben futó szolgáltatás (daemon), amely az image-eket és konténereket kezeli. A CLI parancsaidat ez hajtja végre a háttérben.

A raktár

Registry / Docker Hub

Központi tárhely az image-eknek. A Docker Hub a legnagyobb nyilvános registry — innen húzhatsz le kész image-eket, vagy ide töltheted fel a sajátodat.

A tárhely

Volume

Tartós adattároló, amely túléli a konténer újraindítását vagy törlését. Adatbázisok és feltöltött fájlok megőrzésére használjuk.

Az életciklus

Dockerfile → Image → Konténer

A folyamat mindig ugyanaz: leírod a környezetet egy Dockerfile-ban, ebből a docker build egy hordozható image-et készít, majd a docker run ebből indít egy vagy több futó konténert.

  • 1. Build: a recept (Dockerfile) alapján elkészül a sablon (image).
  • 2. Ship: az image feltölthető a registrybe, és bárhol letölthető.
  • 3. Run: az image-ből izolált, futó konténer lesz.
terminal — build & run
# A Dockerfile-ból image-et építünk
$ docker build -t sajat-app .
[+] Building 8.4s (10/10) FINISHED
=> exporting to image
=> => naming to docker.io/library/sajat-app ✓
# Az image-ből konténert indítunk
$ docker run -p 3000:3000 sajat-app
A szerver fut a http://localhost:3000 címen ✓
Az architektúra

A rétegek a CLI-től a kernelig

A parancsod hosszú utat jár be, mire egy konténer ténylegesen elindul.

1

Docker CLI

A parancssori eszköz, amibe a docker run, build, ps parancsokat gépeled.

2

Docker Engine (daemon)

A REST API-n keresztül fogadja a parancsokat, és kezeli az image-eket, konténereket, hálózatokat.

3

containerd + runc

Az alacsony szintű futtató réteg, amely ténylegesen elindítja és felügyeli a konténer­folyamatokat.

4

Linux kernel (namespaces + cgroups)

Az izoláció és erőforrás-korlátozás a kernel beépített képességeire épül.

A lényeg: a Docker nem virtualizál teljes hardvert. A Linux-kernel namespaces (izoláció) és cgroups (erőforrás-korlátozás) képességeit használja, ezért olyan könnyű és gyors.

Most, hogy érted az elméletet — próbáld ki!

A gyakorlat ragad meg igazán. Vágjunk bele az első saját image megépítésébe.

Kezdő lépések →