Ugrás a tartalomhoz

Sütibeállítások

Típusonként válassza ki, mely sütiket engedélyezi. Választását bármikor módosíthatja a Sütibeállítások linken, amely minden oldal alján megtalálható. Adatvédelmi nyilatkozat

Szükséges

Mindig bekapcsolva

A bejelentkezéshez, a kosár megőrzéséhez és a választásai megjegyzéséhez szükségesek. Ezek mindig be vannak kapcsolva.

Milyen sütik?
  • weboke_sessie, weboke_klant, weboke_remember: a munkamenet és a bejelentkezve maradás
  • weboke_basket: a kosár
  • wkBtwIncl: az árak megjelenítése ÁFÁ-val vagy anélkül
  • wok_cookies: a sütiválasztás, 12 hónap

Méri, melyik hirdetés vezet látogatáshoz vagy rendeléshez, hogy ne fizessünk hatástalan hirdetésekért.

Milyen sütik?
  • Google Ads a Google Tag Manageren keresztül (_gcl_au, _gcl_aw), legfeljebb 90 napig
  • OpenAI Ads, hirdetések a ChatGPT-ben
  • wok_aff: melyik partnerünk ajánlására érkezett (partnerprogram), 60 nap

4,6

Ország és nyelv

Minden országnak saját oldala van, az adott ország áraival és ÁFA-jával.

Megtekintés

A Docker telepítése és az első konténere

Modul 9: Docker és docker compose · Olvasási idő: 11 perc

Tanulási cél: A lecke végére telepíteni tudja a Docker Engine-t a hivatalos csomagforrásból, konténereket tud indítani, megtekinteni, beléjük nézni és eltakarítani, és tudja, miért egyenértékű a docker csoport a roottal.

Kulcsfogalmak: Docker Engine, Docker Desktop, hivatalos apt-forrás, a Debian docker.io csomagja, docker csoport, rootless mode, docker run, -d, -p, -v, --name, docker ps, docker logs, docker exec, docker stop, docker rm, docker image prune, docker system df

Melyik Docker?

Szerverre a Docker Engine kerül: a háttérszolgáltatás (dockerd) és a docker parancs. A Docker Desktop valami más: ablakos program Windowsra, macOS-re és Linux asztali gépekre. Ennek nincs helye szerveren.

A Docker Engine-hez két megbízható forrás létezik:

  1. A Docker saját csomagforrása (download.docker.com). Mindig a legújabb verzió, beleértve a docker compose bővítményt is, amelyet a 9.3. leckében használ. Ezt írja le a Docker dokumentációja, és ezt használja ez a tanfolyam is.
  2. A Debian vagy az Ubuntu docker.io csomagja. Régebbi, de a disztribúció a szokásos biztonsági frissítésekkel (4.2. lecke) naprakészen tartja. Jó választás, ha semmit sem szeretne a disztribúción kívülről; ilyenkor viszont ellenőrizze, hogy elérhető-e a docker compose (szóközzel).

Válasszon egyet. A kettő vegyes telepítése ütközésekhez vezet; a Docker dokumentációja ezért azt javasolja, hogy először távolítsa el a nem hivatalos csomagokat, például a docker.io, a docker-compose és a podman-docker csomagot.

Telepítés a Docker csomagforrásából

Ezek a Docker dokumentációjának Debianra vonatkozó lépései, külön kulccsal és saját Signed-By beállítással (4.1. lecke). Ha szeretné, előtte készítsen pillanatképet.

anna@web1:~$ sudo apt update
anna@web1:~$ sudo apt install ca-certificates curl
anna@web1:~$ sudo install -m 0755 -d /etc/apt/keyrings
anna@web1:~$ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
anna@web1:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc

Ezután következik a /etc/apt/sources.list.d/docker.sources forrásfájl (deb822 formátumban):

Types: deb
URIs: https://download.docker.com/linux/debian
Suites: trixie
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc

Az Ön kiadásának kódneve (cat /etc/os-release, 4.3. lecke) a Suites mezőbe kerül, a dpkg --print-architecture parancs kimenete pedig ebbe a mezőbe: Architectures. Ubuntun az URL https://download.docker.com/linux/ubuntu, a suite pedig például noble.

Ezután a telepítés:

anna@web1:~$ sudo apt update
anna@web1:~$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
anna@web1:~$ sudo docker run hello-world
...
Hello from Docker!
This message shows that your installation appears to be working correctly.

Debianon és Ubuntun a Docker a telepítés után magától elindul, és minden újraindítás után is (systemctl status docker, 6.1. lecke).

Figyelem: az unattended-upgrades (4.2. lecke) alapértelmezés szerint nem frissíti automatikusan az ebből a forrásból származó csomagokat. Vegye fel a karbantartási ütemtervébe (10.4. lecke) a Docker frissítését a sudo apt update && sudo apt upgrade paranccsal, vagy tudatosan adja hozzá a forrást az automatikus frissítésekhez.

A docker csoport egyenlő a roottal

Az interneten mindenhol azt olvashatja, hogy adja hozzá a saját felhasználóját a docker csoporthoz, hogy ne kelljen többé sudo parancsot gépelnie:

anna@web1:~$ sudo usermod -aG docker anna

Csak akkor tegye ezt, ha érti, mit jelent. A Docker dokumentációja egyértelmű: a docker csoport root szintű jogosultságot ad. Aki vezérelheti a Docker szolgáltatást, olyan konténert indíthat, amelybe a gazdagép teljes lemeze be van csatolva:

docker run -it -v /:/host debian chroot /host

és ezzel root lesz a szerverén, jelszó és sudo-naplóbejegyzés nélkül. A Docker dokumentációja így fogalmaz: csak megbízható felhasználók vezérelhessék a Docker szolgáltatást.

Egy olyan szervernél, amelyet csak Ön kezel, ez döntés kérdése: kényelem kontra egy újabb út a roothoz. Biztonságosabb továbbra is sudo docker ... parancsot gépelni; így minden parancs bekerül a sudo-naplóba (3.2. lecke). Semmiképp ne adjon a csoporthoz olyan felhasználót, aki nem lehet root, például egy webhely szolgáltatásfelhasználóját.

Rootless mode

A Docker root nélkül is futhat: ekkor a szolgáltatás és a konténerek egy közönséges felhasználó alatt futnak, saját user namespace-szel. Ezt az adott felhasználóként telepíti a dockerd-rootless-setuptool.sh install paranccsal (a docker-ce-rootless-extras csomagból; előtte szükség van a uidmap csomagra). Egy konténerbeli sebezhetőség így nem ad root jogot a gazdagépen. Vannak korlátai, és nehezebb beállítani; ebben a tanfolyamban a szokásos telepítést használjuk, és a modul szabályaival tartjuk biztonságban.

Egy első valódi konténer

Egy nginx-webszervert indítunk konténerben, amely csak magáról a szerverről érhető el:

anna@web1:~$ sudo docker run -d --name proef -p 127.0.0.1:8080:80 nginx:stable
Unable to find image 'nginx:stable' locally
stable: Pulling from library/nginx
...
3f1c9e0d7a2b...

Az egyes részek:

RészJelentés
-dFuttatás a háttérben (detached)
--name proefEgy név, hogy ne kelljen hosszú azonosítókkal dolgoznia
-p 127.0.0.1:8080:80A konténer 80-as portja a gazdagép 8080-as portja lesz, csak a loopback címen
nginx:stableA hivatalos nginx-image, címke: stable

Ellenőrzés:

anna@web1:~$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  STATUS         PORTS                    NAMES
3f1c9e0d7a2b   nginx:stable   "/docker-entrypoint.…"   Up 5 seconds   127.0.0.1:8080->80/tcp   proef
anna@web1:~$ curl -I http://127.0.0.1:8080
HTTP/1.1 200 OK
Server: nginx/1.28.0
anna@web1:~$ sudo ss -tlnp | grep 8080
LISTEN 0 4096 127.0.0.1:8080 0.0.0.0:* users:(("docker-proxy",pid=2211,fd=7))

Az 5.1. leckéből ismert ss megerősíti: csak a 127.0.0.1 címen. Ha ezt gépelte volna: -p 8080:80, akkor 0.0.0.0:8080 és [::]:8080 szerepelne, és a konténere elérhető lenne az internetről, még akkor is, ha az ufw nem engedi a 8080-as portot (9.3. lecke). A Server fejlécben látható verzió Önnél eltérhet.

Körülnézés és beavatkozás

anna@web1:~$ sudo docker logs proef            # a program kimenete (stdout és stderr)
anna@web1:~$ sudo docker logs -f --tail 20 proef   # az utolsó 20 sor, majd folyamatos követés
anna@web1:~$ sudo docker exec -it proef sh     # shell a futó konténerben
# cat /etc/os-release
# exit
anna@web1:~$ sudo docker stop proef
anna@web1:~$ sudo docker start proef
anna@web1:~$ sudo docker rm -f proef           # leállítás és törlés

A docker logs az első hely, ahol utánanéz, ha egy konténer nem úgy működik, ahogy várja, ugyanúgy, mint a journalctl a szokásos szolgáltatásoknál (6.2. lecke). A docker exec paranccsal belenézhet, de inkább ne módosítson ott semmit: a konténerben végzett változtatások a következő frissítéskor eltűnnek (9.1. lecke).

Takarítás

Az image-ek és a leállított konténerek megmaradnak, amíg el nem takarítja őket. Kis lemezű VPS-en ez észrevétlenül felhalmozódik.

anna@web1:~$ sudo docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          7         3         1.9GB     1.2GB (63%)
Containers      3         3         12MB      0B (0%)
Local Volumes   2         2         180MB     0B (0%)
Build Cache     0         0         0B        0B
anna@web1:~$ sudo docker image prune

A docker image prune törli azokat a név nélküli image-eket, amelyek már semmihez sem tartoznak; a -a kapcsolóval mindazokat az image-eket is, amelyeket egyetlen konténer sem használ. Legyen óvatos a docker system prune --volumes paranccsal: ez azokat a névtelen volume-okat (név nélkülieket) is törli, amelyek abban a pillanatban nem tartoznak konténerhez, a docker volume prune -a pedig még a névvel rendelkező volume-okat is. Ezekben lehetnek az adatai. Ezért mindig adjon nevet a volume-oknak, vagy használjon bind mountot (9.1. lecke), és előbb nézze meg őket a docker volume ls paranccsal.

A konténerek naplói is megnőhetnek. A Docker alapértelmezés szerint méretkorlát nélküli JSON-fájlokban tárolja őket. Korlátot a /etc/docker/daemon.json fájlban állíthat be:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}

Utána: sudo systemctl restart docker; a beállítás csak az újonnan létrehozott konténerekre vonatkozik, a meglévő konténereket hozza létre újra.

A gyakorlatban

A Docker egy WebOké VPS-en ugyanúgy működik, mint bármely más szolgáltatónál: a saját szerverén belül futó szoftver, amelyet Ön telepít és frissít. Kis VPS esetén rendszeresen ellenőrizze a lemezterületet a docker system df és a df -h paranccsal (1.4. lecke).

Összefoglalás

  • A Docker Engine-t a Docker csomagforrásából (saját kulccsal és Signed-By beállítással) vagy a disztribúció docker.io csomagjából telepítse, ne mindkettőből.
  • A docker csoport egyenértékű a roottal; a sudo docker nyomot hagy a sudo-naplóban. A rootless mode biztonságosabb, de korlátozottabb alternatíva.
  • A docker run -d --name ... -p 127.0.0.1:host:container image:tag csak helyileg elérhető konténert indít; ellenőrizze a ss paranccsal.
  • A mindennapi eszközei: docker ps, logs, exec, stop, rm.
  • Takarítsa el az image-eket a docker image prune paranccsal, korlátozza a konténernaplókat (alapértelmezés szerint korlátlanok), és bánjon takarékosan a --volumes paranccsal.

Kvíz

1. Miért ad a docker csoport tagsága gyakorlatilag root jogosultságot?



2. A docker run -d -p 8080:80 nginx után a ss -tlnp ezt a sort mutatja: 0.0.0.0:8080. Mit kellett volna gépelnie ahhoz, hogy a port csak helyileg legyen közzétéve?



3. Egy konténer elindul, de a benne futó webhely nem működik. Mit néz meg először?



4. Miért választ egyetlen forrást a Dockerhez, és miért nem telepíti vegyesen a docker.io és a docker-ce csomagot?



5. Mit tesz a docker system prune --volumes, amivel tisztában kell lennie?



Feladat

Feladat O9.2: Az első konténere. Telepítse a Docker Engine-t a szerverére a lecke szerint (vagy egy tesztgépre). Indítson egy nginx-konténert, amely csak a 127.0.0.1:8080 címen figyel, ellenőrizze a docker ps, a curl -I és a ss -tlnp paranccsal, nézze meg a naplókat, majd takarítsa el. Válaszoljon a kérdésekre: melyik forrásból telepítette a Dockert, mit mutatott a ss a 8080-as portnál, és hozzáadta-e a saját felhasználóját a docker csoporthoz (miért igen vagy miért nem)?

O9.2. feladat: Az első konténere

Ezt a feladatot saját maga végzi el, senki nem ellenőrzi. Pipálja ki, amit elvégzett, és jelölje meg a feladatot elvégzettként.




A pipái és jegyzetei csak ebben a böngészőben maradnak meg, sehova nem küldjük el őket. Ha bejelentkezett, a Fiókomban csak azt tároljuk, hogy elvégezte a feladatot.

További olvasnivaló

Egy pillanat…

Domainek beállítása

Állítsa be domainenként a névszervereket, a tárhelyhez való kapcsolást és azt, hogy ki legyen a tulajdonos.

Domainek betöltése…