Raspberry Pi OS

A Raspberry Pi OS egy szabad operációs rendszer, aminek Debian az alapja, és ezt optimalizálták a Raspberry Pi hardveréhez. – írta: cigam, 8 éve

A Docker

A felhő után egy új őrület vette kezdetét a konténerezés. Rengeteg pro/kontra érvet lehet felhozni ellene, és mellette. Ráadásul nem csak egyfajta megoldás létezik belőle. Ott a snap , a flatpak , az appimage... Mi most a Docker-t fogjuk telepíteni.

curl -sSL https://get.docker.com | sh

A fenti parancs letölt egy kis script fájlt, majd le is futtatja. Ez telepíti a docker aktuális verzióját, amit rögtön le is ellenőrzünk:

docker -v
Docker version 19.03.11, build 42e35e6

Akik már belekóstoltak a programozásba, ismerős lehet a "hello world" példa program, ami nem csinál mást csak üdvözli a világot. A Docker-el való ismerkedést is ezzel kezdjük.

docker run hello-world

Ha hibaüzenetet kapunk, pl.
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Nem voltál figyelmes a telepítéskor. Ha a pi felhasználóval szeretnéd futtatni a konténert, hozzá kell adnod a Docker csoporthoz.

sudo usermod -aG docker pi

Majd ezután ki kell lépned a pi fiókból. A legközelebbi bejelentkezés után már a pi is használhatja a Docker-t. Ezután a kis közjáték után - vagy ha figyelmes voltál, és elolvastad a telepítő üzeneteit - egyből el is indul.

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm32v7)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

1. A kliens kapcsolódott a Docker démonhoz
2. A Docker démon - mivel nem találta meg helyben - a "hello-world" image-t, ezért letöltötte azt.
3. Létrehozott egy új konténert ami csak egy dolgot csinál, kiírja a fenti szöveget.
4. Elindítja az új konténert.
Azért Raspberry Pi OS alatt ne próbáljunk Ubuntu konténert futtatni ;-)

A letöltött image-ek csak egy receptet tartalmaznak. Azt írják le, hogy az adott program futtatásához mire van szükség (mily függőségei vannak). A konténer létrehozásakor "megfőzi" ezt a receptet, vagyis létrehozza azt a környezetet amit az adott program igényel. A szükséges komponensek nem lesznek telepítve, csak a konténeren belül fognak létezni. Ennek a rendszernek az az egyik előnye, ha pl. egy komponensből a rendszer a pitypalatty 1.2 verziót használja, de a futtatandó programnak a pitypalatty 2.0 variánsára lenne szüksége, az nem okoz konfliktust. Az operációs rendszerben megmarad az 1.2 verzió, a konténerbe pedig beteszi a 2.0 verziót. Természetesen az sem okoz problémát, ha az adott disztribúciónak nem része a pitypalatty egyik verziója sem. Azt a Docker letölti magának a konténer létrehozásakor.

A telepített konténerek(programok) listáját a docker ps -a paranccsal tudod lekérdezni.

docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd4914bd1cba hello-world "/hello" 7 seconds ago Exited (0) 3 seconds ago relaxed_buck
d86519eae03b hello-world "/hello" 29 minutes ago Exited (0) 29 minutes ago determined_tereshkova
70e0172a1aec hello-world "/hello" 9 hours ago Exited (0) 9 hours ago admiring_shannon

Valami nem stimmel. Miért van itt 3 hello-world? Mert 3x adtam ki a docker run hello-world parancsot, ő meg 3x elkészítette a hozzá tartozó konténert. Szóval egy már létező konténert ne a run, hanem a start paraméterrel indítsuk.

docker start -a relaxed_buck

Ugye megfigyelted, hogy nem az image nevét (IMAGE), hanem a rendszer által adott nevet írtam be?! Az utolsó NAMES oszlop tartalmazza a nevet, de a CONTAINER ID-t is megadhatod. Az -a paraméterrel a Docker kimenetét kötjük össze a terminállal. Vagyis ha nem vagy kíváncsi miket irogat, az -a paraméter nélkül is futtathatod.
A feleslegessé vált image-eket a

docker rm 70e0172a1aec

parancs segítségével távolíthatod el. A fenti példában nem a nevére (utolsó NASMES oszlop!), hanem a konténer azonosítóra (CONTAINER ID) hivatkoztam.
Egy kicsit zavaró, hogy vagy egy hosszú számsorral, vagy egy fura random névvel hivatkozunk a programunkra. Ezért a konténer létrehozásakor mi is megadhatjuk, hogy milyen nevet adjon neki.

docker run --name hello_vilag hello-world

docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd4914bd1cba hello-world "/hello" 7 seconds ago Exited (0) 3 seconds ago relaxed_buck
993dd532b657 hello-world "/hello" 29 minutes ago Exited (0) 29 minutes ago hello_vilag

A Docker-nek is van áruháza, ahol megkeresheted kedvenc alkalmazásodat, és tippet/leírást is kapsz hogyan kell beüzemelni. A pár oldallal korábban leírt minidlna szolgáltatás konténeres verziója így néz ki.

docker create --net=host --restart unless-stopped --name=minidlna\
-v /media/WDMyBook/Zenék:/media/audio \
-v /media/WDMyBook/Videók:/media/video \
-v /media/WDMyBook/Képek:/media/picture \
-e MINIDLNA_MEDIA_DIR_1=A,/media/audio \
-e MINIDLNA_MEDIA_DIR_2=V,/media/video \
-e MINIDLNA_MEDIA_DIR_3=P,/media/picture \
-e MINIDLNA_FRIENDLY_NAME=magic-dlna \
vladgh/minidlna

Jól látható, hogy itt nem a konfigurációs fájlba, hanem paraméterként adjuk meg a beállításokat. A create parancs csak létrehozza, de nem indítja el a konténert.

--restart unless-stopped
Hasonló az always paraméterhez, de ebben az esetben ha lealítottad, vagy valamilyen okból leállt a konténer futása, azt neked kell kézzel elindítani, még akkor is ha magát a Docker-t újraindítod.

--name=minidlna
A konténer neve minidlna lesz.

-v /media/WDMyBook/Zenék:/media/audio
Összepárosítjuk az operációs rendszer által kezelt könyvtárakat a konténeren belüli elérésekkel. A /media/WDMyBook/Zenék könyvtárat el fogja érni a konténeren belül, méghozzá a /media/audio útvonalon.

-e MINIDLNA_MEDIA_DIR_1=A,/media/audio:
Az első -v paraméterrel megadott elérési útvonalat a mindina "hang" könyvtárnak fogja használni. A második könyvtár lesz a videóké, és a harmadik a képeké.

-e MINIDLNA_FRIENDLY_NAME=magic-dlna
A hálózatban ezen a néven lesz látható a dlna szerver.

vladgh/minidlna
A vladgh felhasználó által készített minidlna nevű image, ami ARM processzorokon is működik. Érdemes alaposan megnézni ezeket a leírásokat, nem evidencia hogy minden platformon futtatható az adott image. pl. a geekduck/minidlna image csak 64bites x86 processzokon hajlandó elindulni.

Aki pedig grafikus felületen keresztül szeretné kezelni a konténereit, az telepítse a portainer-t

docker volume create portainer_data
$ docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Felmerülhet a kérdés, hogy ezek a konténeres programok/szolgáltatások hogyan frissülnek? Nos akár automatikusan is, csak telepíteni kell egy frissítésfigyelő konténert.

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Ez figyeli a Docker Hub push üzeneteit, és amint frissül egy átlátunk telepített konténer image, már frissít is az új verzióra.

Köszönöm a Docker tippeket g.gergo-nek!

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

  • Fedora 26 (3. rész)

    A Fedora egy olyan, a közösség által fejlesztett operációs rendszer, ami Linux kernelt és GNU programokat használ.

  • Fedora 26 (2. rész)

    A Fedora egy olyan, a közösség által fejlesztett operációs rendszer, ami Linux kernelt és GNU programokat használ.

  • Fedora 26 (1.rész)

    A Fedora egy olyan, a közösség által fejlesztett operációs rendszer, ami Linux kernelt és GNU programokat használ.

Előzmények