Bevezetés
Docker egy olyan konténerplatform, amely egy könnyű, virtualizált, hordozható, szoftveresen definiált szabványosított környezet, amely lehetővé teszi a szoftverek futtatását a fizikai gazdagépen futó más szoftverektől elkülönítve. A Docker a szoftverfejlesztés folyamatos fejlesztési és integrációs aspektusának meghatározó eleme. A konzisztens futtatókörnyezet biztosításával a Docker garantálja, hogy a szoftver ugyanúgy viselkedik, függetlenül attól, hogy milyen fizikai gazdagépen futtatják. A Docker-ökoszisztéma alapos áttekintéséhez tekintse meg ezt a cikket.
Bár a Docker konténerek önállóak, néha meg kell osztaniuk az adatokhoz való hozzáférést, vagy az adatokat a lemezre kell menteniük a konténer leállítása után. Az adatok lehetnek adatbázisok, naplófájlok vagy felhasználók által generált adatok formájában. Az ilyen adatokat lehetetlen beépíteni egy Docker-kép konfigurációs fájljába, de elérhetőnek kell lenniük ahhoz, hogy az alkalmazás az elvárásoknak megfelelően fusson. Az adatok megosztását és tartós megőrzését a Docker konténerekben a Docker Volumes kezeli. A Docker Volumes létrehozhatók a konténer létrehozása során, vagy létrehozhatók később is, és csatolhatók a konténerekhez. Ebben az útmutatóban a konténerek közötti adatmegosztás négy különböző módját fogjuk megvitatni.
Előfeltételek
- Állítson be egy Ubuntu 20.04-et futtató szervert és Hozzon létre egy nem-root felhasználót sudo jogosultságokkal. Jelentkezzen be a nem-root felhasználóval a következő lépések végrehajtásához.
- Telepítse a Dockert – van egy útmutatónk a következő témában: Hogyan telepítsük és üzemeltessük a Dockert Ubuntun, kövesse az 1., 2., 3. és 4. lépést. Ennek bármely Ubuntu disztribúció esetén működnie kell.
Kérjük, vegye figyelembe, hogy bár az Ubuntu 20.04-es verziójával dolgozunk, a Dockerre vonatkozó utasítások és parancsok bármely más olyan operációs rendszeren is működnek, amelyre telepítve van a Docker, és a sudo felhasználó hozzá van adva a docker csoporthoz, a fenti előfeltételekben leírtak szerint.
1. lépés: Független Docker Volumes létrehozása
Kezdésként olyan független köteteket hozunk létre, amelyek nem kapcsolódnak egyetlen Docker konténerhez sem. Ehhez a következő parancs áll rendelkezésünkre: docker volume create, amelyet a Docker 1.9-es verziójában vezettek be. Írja be a következő parancsot egy Step1DataVolume :
|
1 |
docker volume create --name Step1DataVolume |
A következő kimenetet kell látnia, amely jelzi, hogy a kötet létrehozása sikeres volt:
![]()
Most, hogy van egy független kötetünk, példaként létrehozhatunk egy új konténert a hivatalos Ubuntu képből, hogy használatba vegyük azt. Írja be a következő parancsot a konténer létrehozásához és a kötet csatolásához:
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
Ebben a parancsban az --rm jelző automatikusan törli a konténert a kilépés után. A -v jelző a kötet megadására és csatolására szolgál. A -v jelző a kötet nevét, egy kettőspontot és a konténeren belüli abszolút útvonalat várja, ahol a kötetnek meg kell jelennie. Ne feledje, hogy a parancs futtatásakor, ha az útvonalban megadott könyvtárak nem léteznek, azok létrejönnek. Ha már léteznek, a csatolt kötet elrejti a meglévő tartalmat. A -ti jelző esetén a -t hozzáférést biztosít a terminálhoz, a -i pedig lehetővé teszi, hogy a terminálon keresztül interakcióba lépjünk a konténerrel.
A konténeren belül futtassa a következő parancsot, hogy adatokat írjon a kötetre:
|
1 |
echo "Step One Sample Text" > /Step1DataVolume/StepOne.txt |
Gépelje be az exit parancsot, és nyomja meg az enter billentyűt a konténerből való kilépéshez. Mint említettük, a konténer a kilépéskor automatikusan törlődik a --rm jelzőnek köszönhetően, azonban a kötet továbbra is elérhető marad.
Annak ellenőrzésére, hogy a kötet továbbra is létezik-e, használhatja a docker volume inspect parancsot:
|
1 |
docker volume inspect Step1DataVolume |
A következő kimenetet kell látnia:

Ezután hozzunk létre egy új konténert. Először csatoljuk a kötetet, és nézzük meg, hogy hozzáférünk-e az előző konténerben létrehozott szöveghez. Írja be a következő parancsot a konténer létrehozásához és futtatásához a ubuntu kép:
|
1 |
docker run -ti --rm -v Step1DataVolume:/Step1DataVolume ubuntu |
A konténeren belül futtassa az alábbi parancsot annak ellenőrzésére, hogy a StepOne.txt fájl létezik-e:
|
1 |
cat /Step1DataVolume/StepOne.txt |
Hasonló kimenetet kell látnia:

Ezután gépelje be a exit parancsot, majd nyomja meg az enter billentyűt a konténerből való kilépéshez. Ebben a lépésben megtanulta, hogyan kezelheti az adatok perzisztenciáját független Docker kötetek használatával, és hogyan csatolhat köteteket konténerekhez.
2. lépés: Olyan Docker kötet létrehozása, amely megőrzi az adatokat a konténer törlésekor
Ebben a lépésben egyetlen parancsot fogunk használni egy kötet létrehozására a konténer létrehozásával egy időben. Ezután töröljük a konténert, és a kötetet egy új konténerhez csatoljuk. A parancs hasonló az itt használthoz: 1. lépés, azonban hozzáadunk egy --name jelzőt a konténer nevének megadásához:
|
1 |
docker run -ti --name=Step2Container1 -v Step2DataVolume:/Step2DataVolume ubuntu |
A konténeren belül adja ki a következő parancsot, hogy adatokat írjon a kötetre, és ellenőrizze, hogy az adatok ott vannak-e:
|
1 2 3 |
echo "Step Two Sample Text" > /Step2DataVolume/StepTwo.txt cat /Step2DataVolume/StepTwo.txt |
Alább látható a három parancs kimenete:

Ezután lépjen ki a konténerből. Amikor a következő paranccsal újraindítja a konténert, a kötet automatikusan csatolódik:
|
1 |
docker start -ai Step2Container1 |
A konténeren belül ellenőrizze, hogy a kötet csatolva van-e, ellenőrizve a StepTwo.txt fájl létezését a következő paranccsal:
|
1 |
cat /Step2DataVolume/StepTwo.txt |
Íme a kimenet:

Most már kiléphet a konténerből. A Docker megakadályozza egy olyan kötet eltávolításának lehetőségét, amelyre egy másik konténer hivatkozik. Megpróbálhatja eltávolítani a kötetet a következő paranccsal:
|
1 |
docker volume rm Step2DataVolume |
A kimenetben a következő hibaüzenetet kell látnia:
![]()
Távolítsuk el a konténert a kimenetben látható konténer-azonosító (container id) segítségével a docker rm paranccsal:
|
1 |
docker rm e3932e65e484bbf4524ca8de1b1dd99c4e92c12f92a9d6b0567a643d0aa6bb2d |
Helyettesítse a kiemelt container id értéket a terminálon megjelenő konténer id azonosítójával. A parancs eltávolítja a konténert, de nem távolítja el a létrehozott kötetet. Az elérhető köteteket a következő docker volume ls paranccsal listázhatja az ellenőrzéshez:
|
1 |
docker volume ls |
Íme a kimenet:

A Step 2 létrehozott konténer eltávolításához adja ki a következő parancsot:
|
1 |
docker volume rm Step2DataVolume |
Ebben a lépésben sikerült egy Docker kötetet létrehoznia a konténer létrehozásával egy időben. Lássuk, hogyan hozhatunk létre kötetet egy már létező, adatokat tartalmazó könyvtárból.
3. lépés: Docker kötet létrehozása egy már létező, adatokat tartalmazó könyvtárból
Ha adatokat szeretne másolni egy kötetre, létrehozhat egy kötetet a konténer létrehozása közben, és megadhatja az alapértelmezett képfájlban (base image) az adatokat tartalmazó könyvtár elérési útját. Az alábbi parancsban létrehozunk egy konténert, és hozzáadunk egy adatkötetet a /var könyvtárnál, amely az alapértelmezett képfájlban adatokat tartalmazó könyvtár:
|
1 |
docker run -ti --rm -v Step3DataVolume:/var ubuntu |
A parancs futtatásakor az alapértelmezett képfájl /var könyvtárának tartalma átmásolódik a kötetre. A kötet ezután csatolható egy új konténerhez. Ezután lépjen ki a konténerből:

Adja ki a következő parancsot a konténer létrehozásához, a kötet csatolásához és a kötet tartalmának listázásához az ls paranccsal:
|
1 |
docker run --rm -v Step3DataVolume:/Step3DataVolume ubuntu ls Step3DataVolume |
Hasonló kimenetet kell látnia a parancstól, amely az alapértelmezett képfájl /var könyvtárának másolata, amely most már elérhető a Step3DataVolume:

Bár a /var könyvtár csatolása, ahogy ebben a példában tettük, nem feltétlenül praktikus, segít megérteni, hogy az egyedi rendszerképekben létrehozott bármely könyvtárat csatolhatja egy Docker kötethez, hogy az adatok elérhetővé váljanak más konténerek számára.
4. lépés: Adatmegosztás több Docker konténer között
A legtöbb esetben azt szeretné, ha több konténer is hozzáférne egyetlen Docker kötet adataihoz. Az előző példákban csak egy konténerhez csatoltunk kötetet. Most megtanulhatja, hogyan csatolhat egy kötetet több konténerhez. Bár ezt könnyen megvalósíthatja, a Docker nem kezeli a fájlzárolást. Ha több konténer ír ugyanabba a kötetbe, a konténerekben futó alkalmazásokat egyedileg kell megterveznie a megosztott adattárakba történő írás kezelésére az adatsérülések elkerülése érdekében.
- Hozza létre a Step4Container1 és Step4DataVolume
Használja a docker run parancsot a --name jelzővel egy nevesített konténer létrehozásához:
|
1 |
docker run -ti --name=Step4Container1 -v Step4DataVolume:/Step4DataVolume ubuntu |
A konténeren belül futtassa a következő parancsot egy szöveges fájl létrehozásához és szöveg hozzáadásához:
|
1 |
echo "Step Four Sample Text" > /Step4DataVolume/StepFour.txt |
Ezután lépjen ki a konténerből, és térjen vissza a gazdakörnyezetbe. Most egy másik konténert szeretnénk létrehozni, és csatolni hozzá a köteteket a Step4Container1 konténerből.
- Hozza létre a Step4Container2 konténert, és csatolja a köteteket a Step4Container1
Futtassa a következő parancsot a Step4Container2 létrehozásához és a kötetek csatolásához a Step4Container1:
|
1 |
docker run -ti --name=Step4Container2 --volumes-from Step4Container1 ubuntu |
A konténeren belül használja a cat parancsot az adatok megmaradásának ellenőrzéséhez:
|
1 |
cat /Step4DataVolume/StepFour.txt |
A következő kimenetet kell látnia:

További szöveget fűzhetünk a fájlhoz a Step4Container2 konténerből a következő parancs beírásával:
|
1 |
echo "We are appending text while inside Step4Container2" >> /Step4DataVolume/StepFour.txt |
Ezután lépjen ki a konténerből, és visszatérünk a Step4Container1 konténerhez, hogy ellenőrizzük, az adatok még mindig megvannak-e.
- A Docker kötetben a különböző konténerek között végrehajtott változtatások ellenőrzése
A változtatások megtekintéséhez először indítsa újra a Step4Container1 konténert a következő paranccsal:
|
1 |
docker start -ai Step4Container1 |
Ellenőrizze a változtatásokat a következő paranccsal:
|
1 |
cat /Step4DataVolume/StepFour.txt |
Az alábbi képernyőképhez hasonló kimenetet kell látnia:

Miután ellenőrizte, hogy mindkét konténer képes adatokat írni és olvasni ugyanabba a kötetbe, most már kiléphet a konténerből. Mint említettük, a Docker nem kezeli a fájlzárolást, a konténerekben futó alkalmazáslogika feladata a megosztott adattárakhoz való írási-olvasási hozzáférés kezelése. A Docker lehetővé teszi a kötetek írásvédettként történő csatolását, hogy megakadályozza a véletlen adatsérülést az olyan konténerek által, amelyeknek csak írásvédett hozzáférésre van szükségük, a :ro hozzáadásával, amint azt a következő példa mutatja.
- Kötet csatolása egy Docker konténerhez írásvédettként
Ebben a példában létrehozunk egy Step4Container3 nevű konténert. A létrehozási parancsban köteteket csatolunk a Step4Container1 konténerből, és hozzáadjuk a :ro opciót annak megadására, hogy ez a konténer írásvédett hozzáféréssel rendelkezik, de nem tud írni a kötetbe. Futtassa a következő parancsot a termináljában:
|
1 |
docker run -ti --name=Step4Container3 --volumes-from Step4Container1:ro ubuntu |
A konténerbe lépve a következő parancs beírásával olvashatja el a kötetben lévő szöveges fájlt:
|
1 |
cat /Step4DataVolume/StepFour.txt |

Ha azonban megpróbálja eltávolítani a fájlt a következő paranccsal:
|
1 |
rm /Step4DataVolume/StepFour.txt |
Egy ehhez hasonló hibaüzenetet fogsz kapni a terminálodban:
![]()
Miután ellenőrizted az írási-olvasási jogosultságokat, kiléphetsz a konténerből. Ha szeretnéd törölni az ebben az útmutatóban létrehozott konténereket és kötetet, futtasd a következő parancsokat:
|
1 2 3 |
docker rm Step4Container1 Step4Container2 Step4Container3 docker volume rm Step4DataVolume |
Ebben a lépésben megtanultad, hogyan oszthatsz meg adatokat több konténer között Docker kötetek használatával, valamint hogyan csatolhatsz adatköteteket a konténerekhez csak olvashatóként.
Összegzés
Ebben az útmutatóban létrehoztál néhány Docker kötetet, és megtanultad, hogyan oszthatsz meg adatokat Docker konténerek között. A konténerek közötti adatmegosztás során megjegyeztük, hogy a konténeren belüli egyedi alkalmazáslogikának kell kezelnie a fájlzárolást az adatsérülés elkerülése érdekében a megosztott adattárolókba történő íráskor, mivel a Docker nem rendelkezik beépített megoldással a fájlzárolás kezelésére.
A Docker használatával kapcsolatos további forrásokért érdemes megnézned a további útmutatókat a blogunkon:
- Hogyan oszthassunk meg adatokat egy Docker konténer és a gazdagép között
- Docker erőforrások takarítása – képek, konténerek és kötetek
- Laravel, Nginx és MySQL üzembe helyezése Docker Compose segítségével
- A Docker telepítése és beállítása CentOS 7 rendszeren
Kellemes számítástechnikát!
Hozzászólások
Még nincsenek hozzászólások. Legyen Ön az első.