Publikálás a DockerHubban

Egy fejlesztés során több módon is közzé tehetjük az elkészült munkát. A GitHub feltehetően egy már természetes és az olvasó számára ismert módja ennek, de maga a DockerHub is lehetővé teszi kész konténer image-ek tárolását, mely saját konténereink terjesztésének az egyik legegyszerűbb módját kínálja. Ebben a fejezetben megismerjük:

  • A DockerHub regisztrációjának folyamatát.

  • Egy kontner feltöltésének menetét.

  • A feltöltött konténer helyességének ellenőrzését.

  • A konténer hozzáférésének szabályozását, illetve a DockerHubban tárolt konténerek kezelését és törlését.

Szükséges eszközök:

Windows, MacOS vagy Linux operációs rendszerű számítógép, telepített Docker szoftverrel.

Feldolgozási idő:

kb. 1 óra, a gyakorlati feladatok megoldására további 1 óra.

Bár a konténer feltöltése a DockerHubba nem túl bonyolult folyamat, az több lépésből áll. Korábban bármit szabadon letölthettünk innen, de a feltöltést már nem végezhetjük anonymous felhasználóként, ahhoz regisztráció szükséges. Amennyiben még nem rendelkezel DockerHub bejelentkezési profillal, készíts egy ilyet a https://hub.docker.com/signup oldalon. A bejelentkezési nevet érdemes gondosan megválasztani, mert azt a későbbiekben azt namespace-ként kell használni, így érdemes „szalonképes”, akár egy későbbi álláspályázatban is vállalható, még szabad nevet keresni.

A bejelentkezést követően lehet létrehozni az egyes konténerek tárolására szolgáló repository-kat. Minden ilyen namespace-ként, tehát a bejelentkezési név alatt jelenik majd meg pl. így: koczkaferenc/teszt. Egy repository lehet privát és nyilvános is, ezt az image céljának és adattartalmának megfelelően érdemes megválasztani. Értelemszerűen a privát repók csak az arra jogosultak, míg a publikusak bárki számára letölthetők a hubról. Az eddigiekben szereplő konténer image-ek mindegyike publikus volt.

Az első példánk legyen egy nagyon egyszerű, egy Pythonban megírt „Hello world!”, amit először elkészítünk, majd kialakítjuk a DockerHubon a tárolására szolgáló repository-t, ezt követően az elkészített konténer image-et feltöltjük, az eredményt pedig végül úgy teszteljük, hogy azt egy másik gépen a docker run paranccsal elindítjuk.

A dockerfile-ban a python:3-ból indulunk ki, majd egy egyszerű echo paranccsal készítjük el az egysoros Python forrást, amit a /hello.py fájlba helyezünk el. (OK, ez finoman szólva sem szokványos módja a forrásprogram elkészítésének, de játsszunk!) Végül meghatározzuk a konténer indító parancsát, ami a python /hello.py lesz.

FROM python:3
RUN echo "print ('Hello World!')" >/hello.py
CMD ["python3", "/hello.py"]

Építsük fel el a konténer image-t a docker build -t hello:1 . paranccsal, majd ellenőrizzük a működését a docker run hello:1 begépelésével!

kf@imac:~/docker$: docker run hello:1
Hello

Ha mindent rendben találtunk, el lehet kezdeni az image feltöltését a DockerHubba. Ennek első lépése a DockerHubon egy új repository létrehozása, amelynek neve példánkban koczkaferenc/teszt lesz (a namespace-t értelemszerűen helyettesítsd a saját login neveddel).

Egy új repository létrehozása a DockerHubban

Egy új repository létrehozása a DockerHubban

Következő lépésben meg kell határozni, hogy a felépített docker image-t melyik repository-ba szeretnéd feltölteni, amihez egy újabb docker parancsot kell használni. Ennek paramétere nálam értelemszerűen a koczkaferenc/teszt volt, de a namespace-t itt is értelemszerűen cserélni kell a sajátodra. Az összerendelést a docker tag paranccsal kell elvégezni az alábbi módon:

kf@imac:~/docker$: docker tag hello:1 koczkaferenc/hello:1

Ezzel a korábban elkészített image-et összekapcsoltuk a DockerHub megfelelő repository-jának nevével, így a feltöltést követően a hubban levő konténer ezzel lesz majd hivatkozható. Már csak el kell végezni magát a feltöltést, amihez viszont előbb be kell jelentkezni:

kf@imac:~/docker$: docker login
Username: <docker_login_name>
Password: <docker_password>
Login Succeeded

Töltsük fel az image-et, majd ellenőrizzük, hogy mi változott a DockerHub webes felületén.

docker push koczkaferenc/hello:1
Repository létrehozása a DockerHubon

Repository létrehozása a DockerHubon

Látható, hogy az 1-es verzió bekerült az elérhető változatok közé. Végül másik gépen ellenőrzést végezünk, hogy valóban letölthető és működtethető-e:

kf@macbook:~$: docker run koczkaferenc/hello:latest

Amennyiben minden rendben történik, a Docker letölti a konténert, elindítja azt, és fáradozásunk gyümölcseként a konzolon megjelenik a „Hello World!” szöveg.

Szakdolgozat

Ha a szakdolgozatod valamilyen konténerizálható alkalmazás, érdemes lehet a DockerHubon is publikálnod, így az bárki számára letölthetővé és elérhetővé tehető. Mivel a konténer tartalmaz minden, a működéséhez szükséges szoftvert, amelyeket már megfelelően be is állítottál, a futtatást bármilyen, docker-képes gépen könnyedén, egy paranccsal el lehet végezni.

Összefoglalás

Ebben a rövid fejezeteben a konténer image-ek DockerHubba történő publikálását ismertük meg. A folyamat első lépéseként egy hozzáférést készítettünk a DockerHubon, majd elkészítettük a konténer image-et. A taggelést és a bejelentkezést követően feltöltöttük a konténer image-et, végül pedig egy másik gépen ellenőriztük annak működőképességét.

Feladatok

  1. Készíts egy saját DockerHub hozzáférést!

  2. Jelentkezz be a DockerHubba, majd hozz létre Demo néven egy repository-t a saját névteredben!

  3. Az előző fejezetben létrehozott Php web projektet lásd el egy megfelelő taggel!

  4. Töltsd fel ezt az image-et a DockerHubba!

  5. Ellenőrizd a DockerHub webes felületén a feltöltés sikerességét és tekintsd át, milyen további információk érhetők el arról!

  6. Lehetőség szerint egy másik (akár virtuális) gépen hozd létre a konténered egy példányát úgy, hogy a DockerHubot használod annak forrásaként!

  7. Fejleszd tovább az eredeti web tartalmát a konténerben, készítsd el a második verzió image-ét, taggeld a megfelelő verzióval, majd ezt is töltsd fel a DockerHubba!

  8. Ellenőrizd ennek a verziónak a letölthetőségét, és teszteld, hogy ebben már valóban az újabb tartalom érhető el.

  9. Állítsd le az összes, ehhez a projekthez tartozó konténert, töröld őket, valamint a létrehozásukhoz szükséges konténer image-eket is!

  10. Töröld a projekt repository-t a DockerHubból is!

  11. Készíts az előző fejezetben létrehozott web-1.pelda.hu és web-2.pelda.hu image-ek számára egy-egy repository-t a DockerHubon, és töltsd fel őket oda!

  12. Ellenőrizd, hogy ezek elérhetők és működőképesek-e, és őrizd is meg őket, mert a A HAProxy fejezet feladatának megoldásához még mindig szükség lesz rájuk!