Modul 9 · 9.2
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:
- A Docker saját csomagforrása (
download.docker.com). Mindig a legújabb verzió, beleértve adocker composebő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. - A Debian vagy az Ubuntu
docker.iocsomagja. 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 adocker 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.ascEzutá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.ascAz Ö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 annaCsak 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ész | Jelentés |
|---|---|
-d | Futtatás a háttérben (detached) |
--name proef | Egy név, hogy ne kelljen hosszú azonosítókkal dolgoznia |
-p 127.0.0.1:8080:80 | A konténer 80-as portja a gazdagép 8080-as portja lesz, csak a loopback címen |
nginx:stable | A 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ésA 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 pruneA 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-Bybeállítással) vagy a disztribúciódocker.iocsomagjából telepítse, ne mindkettőből. - A docker csoport egyenértékű a roottal; a
sudo dockernyomot 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:tagcsak helyileg elérhető konténert indít; ellenőrizze assparanccsal. - A mindennapi eszközei:
docker ps,logs,exec,stop,rm. - Takarítsa el az image-eket a
docker image pruneparanccsal, korlátozza a konténernaplókat (alapértelmezés szerint korlátlanok), és bánjon takarékosan a--volumesparanccsal.
Kvíz
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.
Ha a Docker saját csomagforrásából telepíti, az unattended-upgrades alapértelmezés szerint nem frissíti; a disztribúció docker.io csomagját viszont igen. Az ss kimenetében 127.0.0.1:8080 szerepeljen, ne 0.0.0.0:8080. A docker csoport root-jogosultságot ad; sudo docker használatával minden parancs bekerül a sudo naplójába.
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ó
- Docker-dokumentáció, Install Docker Engine on Debian: https://docs.docker.com/engine/install/debian/
- Docker-dokumentáció, Install Docker Engine on Ubuntu: https://docs.docker.com/engine/install/ubuntu/
- Docker-dokumentáció, Linux post-installation steps: https://docs.docker.com/engine/install/linux-postinstall/
- Docker-dokumentáció, Docker security (Docker daemon attack surface): https://docs.docker.com/engine/security/
- Docker-dokumentáció, Rootless mode: https://docs.docker.com/engine/security/rootless/
- Docker-dokumentáció, JSON File logging driver: https://docs.docker.com/engine/logging/drivers/json-file/
- VPS: az első bejelentkezéstől a biztonságos szerverig 6.1: A Docker telepítése a hivatalos forrásból
