Meglévő Docker-lemezkép lekérése és helyi üzembe helyezése

Befejeződött

A Docker egy olyan technológia, amely lehetővé teszi az alkalmazások és szolgáltatások gyors és egyszerű üzembe helyezését. A Docker-alkalmazások Docker-rendszerképek használatával futnak. A Docker-rendszerkép egy előre becsomagolt környezet, amely tartalmazza az alkalmazás kódját és a környezetet, amelyben a kód fut.

A korábban ismertetett vállalati forgatókönyv szerint meg szeretné ismerni egy alkalmazásnak a Dockerrel történő csomagolásának és futtatásának megvalósíthatóságát. Úgy dönt, hogy létrehoz és üzembe helyez egy tesztelési célú webalkalmazást futtató Docker-rendszerképet.

Ebben a leckében elsajátítja a Docker-rendszerképben tárolt tárolóalapú alkalmazás futtatásához kapcsolódó fő fogalmakat és folyamatokat.

A Docker áttekintése

A Docker a tárolóalapú alkalmazások futtatására használt eszköz. A tárolóalapú alkalmazás tartalmazza az alkalmazást és a futtatókörnyezethez használt fájlrendszert. Egy tárolóalapú alkalmazás például állhat egy adatbázisból, valamint az alkalmazás futtatásához szükséges egyéb szoftverekből és konfigurációs adatokból.

A tárolóalapú alkalmazás általában sokkal kevesebb erőforrást igényel, mint egy virtuális gép, amelyet ugyanannak az alkalmazásnak a futtatására konfiguráltak. Ennek a kisebb erőforrás-igénynek az az oka, hogy a virtuális gépeknek a teljes operációs rendszert és az azt támogató környezetet is el kell látnia. A Docker-tárolók esetében ez a többletterhelés nincs jelen, mert a Docker a gazdagép operációs rendszerének kernelét használja a tároló működtetésére. A Docker-rendszerképek letöltése és indítása gyorsabb és helytakarékosabb, mint egy hasonló funkciót nyújtó virtuális gép letöltése és futtatása.

Tárolóalapú alkalmazást úgy hozhat létre, hogy létrehoz egy olyan rendszerképet , amely fájlokat és a Docker által használt konfigurációs információk egy szakaszát tartalmazza. Az alkalmazás futtatásához utasítani kell a Dockert, hogy indítson el egy tárolót a lemezkép alapján. A tároló indításakor a Docker a lemezkép-konfiguráció alapján határozza meg, milyen alkalmazást futtasson a tárolón belül. A Docker biztosítja az operációs rendszer erőforrásait és a szükséges biztonságot. Biztosítja, hogy a tárolók párhuzamosan fussanak, és viszonylag elszigeteltek maradjanak.

Fontos

A Docker nem biztosítja a virtuális gépek esetében elérhető elkülönítési szintet. A virtuális gépek hardveres szinten valósítják meg az elkülönítést. A Docker esetében a tárolók ugyanazokat a mögöttes operációsrendszer-erőforrásokat és kódtárakat használják. A Docker azonban gondoskodik arról, hogy egyik tároló se férhessen hozzá más tárolók erőforrásaihoz, kivéve, ha azok konfigurációja ezt lehetővé teszi.

Ha helyi fejlesztést és tesztelést végez, a Dockert asztali számítógépén vagy laptopján is futtathatja. Éles rendszerek esetében a Docker használható kiszolgálókörnyezetekkel, beleértve a Linux és a Microsoft Windows Server 2016 számos változatát. Sok beszállító támogatja a Docker felhőbeli használatát is. Az Azure Container Registry-ben például Docker-lemezképeket tárolhat, az Azure Container Instances segítségével pedig tárolókat futtathat.

Ebben a modulban a Dockert fogja használni helyileg egy rendszerkép létrehozásához és futtatásához. Ezután feltölti a rendszerképet az Azure Container Registrybe, és egy Azure Container Instance-példányban futtatja. A Docker e verziója a Docker-lemezképek helyi fejlesztésére és tesztelésére alkalmas.

Linux és Windows rendszerű Docker-lemezképek

A Dockert kezdetben Linuxra fejlesztették ki, és azóta a Windows támogatásával bővült. Egy Docker-lemezkép lehet Windows- vagy Linux-alapú, azonban mind a kettőt egyszerre nem. A rendszerkép operációs rendszere határozza meg, hogy milyen típusú operációsrendszer-környezetet használ a tárolóban.

Ha a Docker-lemezképek készítői hasonló funkciókat szeretnének nyújtani mind a Linux-, mind a Windows-alapú lemezképek esetében, azokat külön kell felépíteniük. A Microsoft például olyan Windows- és Linux Docker-lemezképeket kínál, amelyek egy ASP.NET Core-környezetet tartalmaznak, amelyet a tárolóalapú ASP.NET Core-alkalmazások alapjául használhat.

Azok a Linux rendszerű számítógépek, amelyekre a Docker telepítve van, csak Linux-tárolókat képesek futtatni. Azok a Windows rendszerű számítógépek, amelyekre a Docker telepítve van, mind a két típusú tárolót képesek futtatni. A Windows egy linuxos rendszer futtatásához és Linux-tárolók futtatásához használt virtuális géppel futtatja mindkettőt.

Ebben a modulban egy Linux-alapú rendszerképet fog létrehozni és futtatni.

Docker regisztrációs adatbázisok és a Docker Hub

A Docker-lemezképek a regisztrációs adatbázisokban vannak tárolva, és onnan is érhetők el. A regisztrációs adatbázisok olyan webszolgáltatások, amelyekhez a Docker tárolólemezképek fel- és letöltése céljából csatlakozhat. A legismertebb regisztrációs adatbázis a Docker Hub, amely egy nyilvános regisztrációs adatbázis. Számos magánszemély és szervezet használja a Docker Hubot lemezképek közzétételére, amelyeket le lehet tölteni, és futtatni lehet az asztali számítógépeken, a kiszolgálókon vagy a felhőben futó Docker használatával. Létrehozhat egy Docker Hub-fiókot, és ingyenesen feltöltheti rá lemezképeit.

A regisztrációs adatbázis adattárak sorozataként vannak rendezve. Az egyes adattárak több megegyező nevű (és általában megegyező célú és funkciókkal rendelkező) Docker-lemezképet tartalmaznak. Ezek a képek általában különböző verziókkal rendelkeznek, amelyek címkével vannak azonosítva. Ez a mechanizmus lehetővé teszi a lemezképek több verziójának kompatibilitási okokból való közzétételét és megtartását. Amikor letölt és futtat egy lemezképet, meg kell adnia a lemezkép regisztrációs adatbázisát, adattárát és a verziót jelölő címkéjét. A címkék szöveges feliratok, amelyekhez a saját verziószámozási rendszerét használhatja (v1.0, v1.1, v1.2, v2.0 és így tovább).

Tegyük fel, hogy az ASP.NET Core Runtime Docker-rendszerképet szeretné használni. Ez a rendszerkép két verzióban érhető el:

  • mcr.microsoft.com/dotnet/core/aspnet:2.2
  • mcr.microsoft.com/dotnet/core/aspnet:2.1

Most tegyük fel, hogy a .NET Core Samples Docker-rendszerképeket szeretné használni. Az alábbi négy verzió közül választhat:

  • mcr.microsoft.com/dotnet/samples:dotnetapp
  • mcr.microsoft.com/dotnet/samples:aspnetapp

Feljegyzés

Egy lemezkép több címkével is rendelkezhet. Konvenció szerint a rendszer a rendszerkép legújabb verzióját rendeli hozzá a legújabb címkéhez a verziószámot leíró címke mellett. Amikor a lemezképek új verzióját adja ki, módosíthatja a legfrissebb címke hozzárendelését, hogy az új lemezképre vonatkozzon.

Az adattár egyúttal a lemezképek adatvédelmi egysége is. Ha nem szeretne megosztani egy lemezképet, priváttá teheti az adattárat. Emellett hozzáférést adhat az olyan felhasználóknak, akikkel meg szeretné osztani a lemezképet.

A Docker Hub böngészése és lemezképek lekérése

Feljegyzés

Nem kell elvégeznie a példákat, és nem kell futtatnia a kódot a következő szakaszokban. Ezt a következő leckében fogja megtenni.

A Docker Hubban gyakran talál olyan képet, amely szorosan megegyezik a tárolóba helyezni kívánt alkalmazás típusával. Az ilyen lemezképet letöltheti, és kiegészítheti a saját alkalmazáskódjával.

A Docker Hub sok ezer lemezképet tartalmaz. A Docker használatával a parancssorból vagy a Docker Hub webhelyéről kereshet és böngészhet egy beállításjegyzékben. A webhely lehetővé teszi a rendszerképek keresését, szűrését és kiválasztását típus és közzétevő szerint. Az alábbi ábrán egy példa látható a keresési oldalra.

Képernyőkép a Docker Hub keresési oldaláról, ahol különböző tárolólemezképek jelennek meg.

A lemezképek lekérése a lemezkép nevével ellátott docker pull parancs használatával lehetséges. Ha csak az adattár nevét adja meg, a Docker alapértelmezés szerint a latest címkézésű rendszerképet tölti le a Docker Hub adattárból. Ne feledje, hogy a parancs módosításával különböző címkéket használva is letölthet különböző adattárakból. Ez a példa az aspnetapp címkézésű rendszerképet kéri le az mcr.microsoft.com/dotnet/core/samples:aspnetapp adattárból. Ez a rendszerkép egy egyszerű ASP.NET Core webalkalmazást tartalmaz.

Feljegyzés

Az ebben a leckében található példák célja a különböző Docker-parancsok szintaxisának bemutatása. A lecke során nem szükséges futtatnia ezeket a parancsokat. A leckét követő gyakorlatok a Docker közvetlen használatához adnak útmutatást.

docker pull mcr.microsoft.com/dotnet/samples:aspnetapp

A lemezképek lehívásakor a Docker helyileg tárolja azokat, és elérhetővé teszi a tárolók futtatása céljából. A helyi regisztrációs adatbázisban található lemezképeket a docker image list paranccsal listázhatja.

docker image list

A kimenet a következő példához hasonlóan néz ki:

REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/dotnet/samples   aspnetapp           6e2737d83726        6 days ago          263MB

A lemezkép névazonosítójával sok más Docker-parancsban hivatkozhat a lemezképre.

Docker-tároló futtatása

A tároló indításához futtassa a docker run parancsot. A futtatni kívánt lemezképet a nevével vagy azonosítójával határozhatja meg. Ha a lemezképre vonatkozó docker pull még nem történt meg, a Docker elvégzi Önnek.

docker run mcr.microsoft.com/dotnet/samples:aspnetapp

Ebben a példában a parancs a következő üzenettel válaszol:

warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
 No XML encryptor configured. Key {d8e1e1ea-126a-4383-add9-d9ab0b56520d} may be persisted to storage in unencrypted form.
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.

Ez a lemezkép webalkalmazást tartalmaz, így mostantól a 80-as HTTP-porton keresztül figyeli az érkező kérelmeket. Ha azonban megnyit egy webböngészőt, és felkeresi a(z) http://localhost:80 címet, az alkalmazás nem jelenik meg.

Alapértelmezés szerint a Docker nem engedi, hogy a bejövő hálózati kérelmek elérjék a tárolót. Utasítania kell a Dockert, hogy rendelje hozzá a számítógép egy adott portszámát a tároló adott portszámához, a(z) docker run-p beállítással való kiegészítésével. Ez az utasítás engedélyezi a hálózati kérelmeket a tárolóhoz a megadott porton.

Az ebben a lemezképben található webalkalmazás emellett nem a parancssorból való interaktív használatra készült. Amikor elindítjuk, azt szeretnénk, hogy a Docker a háttérben indítsa el, és hagyja magától futni. A -d jelölővel utasíthatja a Dockert, hogy indítsa el a webalkalmazást a háttérben.

Nyomja le a Ctrl+C billentyűkombinációt a kép leállításához, majd indítsa újra a következő példában látható módon:

docker run -p 8080:80 -d mcr.microsoft.com/dotnet/samples:aspnetapp

A parancs a tároló 80-as portját a számítógép 8080-as portjára képezi le. A(z) http://localhost:8080 oldal böngészőben való meglátogatásakor a minta-webalkalmazást láthatja.

Képernyőkép a böngészőben futó minta-webalkalmazásról.

Tárolók és fájlok

Ha a futó tároló módosítja a lemezképén található fájlokat, a módosítások csak a végrehajtásuk helyeként szolgáló tárolóban léteznek. Ha nem tesz meg konkrét lépéseket a tároló állapotának megőrzéséhez, ezek a módosítások elvesznek a tároló eltávolításakor. Hasonlóképpen, az egyidejűleg futó lemezképen alapuló tárolók nem osztják meg a fájlokat a lemezképen. Minden tárolónak saját, független másolata van. Az egyik tároló által a fájlrendszerbe írt adatok nem láthatók a másik számára.

A tárolókhoz hozzá lehet adni írható köteteket. Az egyes kötetek a tároló által csatlakoztatható fájlrendszereket képviselnek, és elérhetőek a tárolóban futó alkalmazások számára. A köteten található adatok megmaradnak, ha a tároló leáll, és több tároló is használhatja ugyanazt a kötetet. A kötetek létrehozásának és használatának részleteire ez a modul nem tér ki.

Ajánlott eljárás, hogy ne kelljen módosítani a rendszerkép fájlrendszerét a Dockerrel üzembe helyezett alkalmazások esetében. Csak olyan ideiglenes fájlok esetében használja, amelyek elvesztése nem jelent problémát.

A Docker-tárolók kezelése

Az aktív tárolókat a(z) docker ps paranccsal tekintheti meg.

docker ps

A kimenet tartalmazza a tároló állapotát – ha fut, kilépett, ha leállt –, többek között a rendszerkép indításakor megadott parancssori jelzőket és további információkat. A Docker lehetővé teszi, hogy egyszerre több tárolót is futtatjon ugyanabból a rendszerképből, így minden tárolóhoz egyedi azonosító és egyedi, olvasható név tartozik. A legtöbb, különálló tárolók kezelésére használható Docker-parancs az azonosító vagy a név használatával hivatkozhat egy adott tárolóra.

Az alábbi kimenetben két tároló látható. A PORTS mezőben látható, hogy a(z) elegant_ramanujan azonosítójú tároló az a lemezkép, amelyiknek a 80-as Docker-gazdagépportja a 8080-as portra van leképezve a számítógépen. A(z) youthful_heisenberg példány a lemezkép előző futtatásának tárolója. A COMMAND mező azt a parancsot mutatja, amellyel a tároló elindította az alkalmazást a lemezképben. Ebben az esetben mindkét tároló esetében a dotnet aspnetapp.dll. A tárolók képazonosítója is ugyanaz, mert mindkét tároló ugyanazt a lemezképet hajtja végre.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57b9587583e3        mcr.microsoft.com/dotnet/core/samples:aspnetapp   "dotnet aspnetapp.dll"   42 seconds ago      Up 41 seconds       0.0.0.0:8080->80/tcp   elegant_ramanujan
d27071f3ca27        mcr.microsoft.com/dotnet/core/samples:aspnetapp   "dotnet aspnetapp.dll"   5 minutes ago      Up 5 minutes       0.0.0.0:8081->80/tcp   youthful_heisenberg

Feljegyzés

A docker ps a docker container ls hivatkozása. Ezeknek a parancsoknak a nevei a ps és az ls Linux-segédprogramokon alapulnak, amelyek futó folyamatokat, illetve fájlokat listáznak.

Az aktív tárolót leállíthatja a docker stop paranccsal, megadva a tárolóazonosítót.

docker stop elegant_ramanujan

A docker ps ismételt futtatásakor láthatja, hogy az elegant_ramanujan tároló már nem szerepel a kimenetben. A tároló továbbra is létezik, de már nem futtat futó folyamatot. A docker ps kimenetébe a -a jelölő használatával foglalhatja bele a leállított tárolókat:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57b9587583e3        mcr.microsoft.com/dotnet/core/samples:aspnetapp   "dotnet aspnetapp.dll"   2 minutes ago       Exited (0) 21 seconds ago                       elegant_ramanujan
d27071f3ca27        mcr.microsoft.com/dotnet/core/samples:aspnetapp   "dotnet aspnetapp.dll"   7 minutes ago      Up 7 minutes       0.0.0.0:8081->80/tcp   youthful_heisenberg

A leállított tárolókat a docker start paranccsal indíthatja újra. A tároló fő folyamata újra elindul.

docker start elegant_ramanujan

A tárolók leállásakor azok általában el is lesznek távolítva. A tárolók eltávolításával törölhetők az esetlegesen hátramaradt erőforrások. Ha eltávolít egy tárolót, a lemezképének fájlrendszerén végrehajtott módosítások véglegesen elvesznek.

docker rm elegant_ramanujan

Nem távolíthat el futó tárolót, de kényszerítheti a tároló leállítását és eltávolítását a -f jelölővel a docker rm parancsra. Ez egy tároló gyors leállításának és eltávolításának gyors módja, de csak akkor használható, ha a tárolón belüli alkalmazásnak nem kell kecses leállítást végeznie.

docker container rm -f elegant_ramanujan

Docker-lemezképek eltávolítása

A helyi számítógépről a(z) docker image rm paranccsal távolíthat el lemezképet. Adja meg az eltávolítandó lemezkép azonosítóját. Az alábbi példa eltávolítja a minta webalkalmazás képét.

docker image rm mcr.microsoft.com/dotnet/core/samples:aspnetapp

A lemezképet futtató tárolókat le kell állítani a lemezkép eltávolítása előtt. Ha a rendszerképet továbbra is használja egy tároló, a következőhez hasonló hibaüzenet jelenik meg. Ebben a példában a hiba azért fordul elő, mert a youthful_heisenberg tároló továbbra is a rendszerképet használja.

Error response from daemon: conflict: unable to delete 575d85b4a69b (cannot be forced) - image is being used by running container c13165988cfe