Meglévő Docker-lemezkép lekérése és helyi üzembe helyezése
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önyvben meg szeretné vizsgálni az alkalmazások Dockerrel való 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épekhez 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 az egyik tároló csak akkor férhessen hozzá a másik erőforrásaihoz, ha a tárolók erre vannak konfigurálva.
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 mindkettőt egy virtuális géppel futtatja Linux-rendszer futtatásához, és a virtuális Linux-rendszert Használja Linux-tárolók futtatására.
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:
- 8.0 (Hosszú távú támogatás):
mcr.microsoft.com/dotnet/aspnet:8.0
- 6.0 (Hosszú távú támogatás):
mcr.microsoft.com/dotnet/aspnet:6.0
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:dotnetapp-chiseled
mcr.microsoft.com/dotnet/samples:aspnetapp
mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled
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.
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 beolvassa a képet a mcr.microsoft.com/dotnet/samples:aspnetapp adattárból származó címkévelaspnetapp
. 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 rendszerképnév-azonosítóval számos más Docker-parancsban hivatkozhat a ké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.
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. A kötet egy fájlrendszert jelöl, amelyet a tároló csatlakoztathat, és elérhetővé válik a tárolóban futó alkalmazás 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 – a futtatás után a kilépést, 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ó leállítása után általában el kell távolítania azt is. 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