Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebben az oktatóanyagban megtanulhatja, hogyan őrizheti meg az adatokat egy tárolóalkalmazásban. Futtatáskor vagy frissítésekor az adatok továbbra is elérhetők maradnak. Az adatok megőrzéséhez két fő kötettípus használható. Ez az oktatóanyag a elnevezett kötetekre összpontosít.
Megismerheti a kötött csatolásokatis, amelyek a gazdagép pontos csatolási pontját szabályozzák. Kötéseket használhat, hogy megőrizze az adatokat, de ezzel több adatot is hozzáadhat a tárolókhoz. Amikor egy alkalmazáson dolgozik, egy kötési pontot használhat, hogy a forráskódot a tárolóba csatolja, így a tároló érzékelheti a kód módosításait, válaszolhat rájuk, és ön azonnal láthatja a változásokat.
Ez az oktatóanyag a képrétegezést, a réteg gyorsítótárazását és a többfázisú buildeket is bemutatja.
Ebben az oktatóanyagban a következőket sajátíthatja el:
- A tárolók közötti adatok megértése.
- Adatok megőrzése elnevezett kötetek használatával.
- Használjon kötéstartókat.
- Képréteg megtekintése.
- Gyorsítótár-függőségek.
- A többfázisú buildek ismertetése.
Előfeltételek
Ez az oktatóanyag folytatja az előző oktatóanyagot, amely egy tárolóalkalmazás létrehozása és megosztása a Visual Studio Code-tal. Kezdje ezzel az előfeltételekkel.
A tárolókon belüli adatok ismertetése
Ebben a szakaszban két tárolót indít el, és mindegyikben létrehoz egy fájlt. Az egyik tárolóban létrehozott fájlok nem érhetők el egy másik tárolóban.
Indítsa el a
ubuntutárolót a következő paranccsal:docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"Ez a parancs két parancsot indít el a
&&használatával. Az első rész egyetlen véletlenszerű számot választ ki, és beírja/data.txt. A második parancs egy fájlt figyel a tároló futásának fenntartásához.A VS Code Tárolókezelőjében kattintson a jobb gombbal az ubuntu tárolóra, és válassza a Shell csatolása lehetőséget.
Megnyílik egy terminál, amely egy parancssori héjat futtat az Ubuntu-konténerben.
Futtassa a következő parancsot a
/data.txtfájl tartalmának megtekintéséhez.cat /data.txtA terminál 1 és 10000 közötti számot jelenít meg.
Ha a parancssort szeretné használni az eredmény megtekintéséhez, kérje le a tárolóazonosítót a
docker psparanccsal, és futtassa a következő parancsot.docker exec <container-id> cat /data.txtIndítsa el a másik
ubuntutárolót.docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"Ezzel a paranccsal megtekintheti a mappa tartalmát.
docker run -it ubuntu ls /Nem lehet ott
data.txtfájl, mert csak az első tároló üres területére lett megírva.Válassza ki ezt a két Ubuntu-tárolót. Kattintson a jobb gombbal, és válassza az eltávolítását. A parancssorból a
docker rm -fparanccsal távolíthatja el őket.
A todo-adatok megőrzése elnevezett kötetek használatával
A todo alkalmazás alapértelmezés szerint egy SQLite-adatbázisban tárolja az adatait,/etc/todos/todo.db.
A SQLite Database egy relációs adatbázis, amely egyetlen fájlban tárolja az adatokat.
Ez a megközelítés kis projektek esetében működik.
Az egyetlen fájlt a gazdagépen is megőrizheti. Amikor elérhetővé teszi a következő tároló számára, az alkalmazás ott folytathatja, ahol abbahagyta. Ha kötetet hoz létre, és csatolja vagy csatlakoztatja, azt a mappába, amelyben az adatokat tárolja, megőrizheti az adatokat. A tároló a todo.db fájlba ír, és az adatok megmaradnak a kötet gazdagépe számára.
Ebben a szakaszban használjon egy nevű kötetet. A Docker fenntartja a kötet fizikai helyét a lemezen. Tekintse meg a kötet nevét, és a Docker biztosítja a megfelelő adatokat.
Hozzon létre egy kötetet a
docker volume createparanccsal.docker volume create todo-dbA TÁROLÓKalatt válassza a getting-started lehetőséget, majd kattintson a jobb gombbal. Az alkalmazástároló leállításához válassza a Leállítás lehetőséget.
A tároló parancssorból való leállításához használja a
docker stopparancsot.Indítsa el a kezdő konténert az alábbi paranccsal.
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-startedA kötetparaméter megadja a csatlakoztatni kívánt kötetet és a helyet,
/etc/todos.Frissítse a böngészőt az alkalmazás újratöltéséhez. Ha bezárta a böngészőablakot, lépjen a
http://localhost:3000/. Adjon hozzá néhány elemet a teendőlistához.
Távolítsa el a "bevezető" tárolót a feladatkezelő alkalmazáshoz. Kattintson a jobb gombbal a tárolóra a Tárolókezelőben, és válassza az Eltávolítás vagy a
docker stopdocker rmparancsok használata lehetőséget.Indítsa el az új tárolót ugyanazzal a paranccsal:
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-startedEz a parancs ugyanazt a meghajtót csatlakoztatja, mint korábban. Frissítse a böngészőt. A hozzáadott elemek továbbra is szerepelnek a listában.
Távolítsa el újra a getting-started tárolót.
Az alábbiakban ismertetett elnevezett kötetek és kötési csatlakoztatások az alapértelmezett Docker-motortelepítés által támogatott kötetek fő típusai.
| Ingatlan | Elnevezett kötetek | Kötési csatlakoztatások |
|---|---|---|
| Hoszt helye | Docker kiválasztja | Ön szabályozhatja |
Példa csatlakoztatása (-vhasználatával ) |
saját kötet:/usr/local/data | /path/to/data:/usr/local/data |
| Az új kötet feltöltése a konténer tartalmával | Igen | Nem |
| Támogatja a kötetillesztőprogramokat | Igen | Nem |
Számos kötetillesztő beépülő modul érhető el az NFS, az SFTP, a NetApp stb. támogatásához. Ezek a beépülő modulok különösen fontosak a tárolók több gazdagépen való futtatásához egy klaszterezett környezetben, mint például a Swarm vagy a Kubernetes.
Ha kíváncsi arra, hogy a Docker hol ténylegesen tárolni az adatokat, futtassa a következő parancsot.
docker volume inspect todo-db
Nézze meg a kimenetet, hasonlóan ehhez az eredményhez.
[
{
"CreatedAt": "2019-09-26T02:18:36Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]
A Mountpoint az adatok tárolásának tényleges helye.
A legtöbb számítógépen gyökérszintű hozzáférésre van szükség a könyvtár gazdagépről való eléréséhez.
Kötési csatlakoztatások használata
A bind mountokhasználatával szabályozhatja a gazdagép pontos csatolási pontját. Ez a megközelítés megőrzi az adatokat, de gyakran használják több adat tárolókba való biztosítására. A kötéses csatolás használatával csatolhatja a forráskódot a tárolóba, hogy az lássa a kódbeli módosításokat, reagáljon, és Ön azonnal láthassa ezeket a változtatásokat.
Ha futtatni szeretné a tárolót egy fejlesztési munkafolyamat támogatásához, hajtsa végre a következő lépéseket:
Távolítsa el a
getting-startedtárolókat.A
appmappában futtassa a következő parancsot.docker run -dp 3000:3000 -w /app -v ${PWD}:/app node:lts-alpine sh -c "yarn install && yarn run dev"Ez a parancs a következő paramétereket tartalmazza.
-
-dp 3000:3000ugyanaz, mint korábban. Futtassa leválasztott módban, és hozzon létre egy portleképezést. -
-w /appmunkakönyvtár van a tárolóban. -
-v ${PWD}:/app"Kötés csatlakoztatja az aktuális könyvtárat a tároló gazdagépéről a/appkönyvtárba. -
node:lts-alpinea használni kívánt képet. Ez a kép az alkalmazás alapértelmezett képe a Dockerfile. -
sh -c "yarn install && yarn run dev"A parancsot. Egy rendszerhéjat indít el ashhasználatával, és futtatja ayarn install-et az összes függőség telepítéséhez. Ezutányarn run devfut. Ha apackage.json-ba néz, adevszkript elindulnodemon.
-
A naplókat
docker logshasználatával tekintheti meg.docker logs -f <container-id>$ nodemon src/index.js [nodemon] 2.0.20 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node src/index.js` Using sqlite database at /etc/todos/todo.db Listening on port 3000Amikor megjelenik a lista utolsó bejegyzése, az alkalmazás fut.
Ha befejezte a naplók megtekintését, válasszon egy billentyűt a terminálablakban, vagy válassza a Ctrl+C külső ablakban.
A VS Code-ban nyissa meg src/static/js/app.js. Módosítsa az Elem hozzáadása gomb szövegét a 109. sorban.
- {submitting ? 'Adding...' : 'Add Item'} + {submitting ? 'Adding...' : 'Add'}Mentse el a változtatást.
Frissítse a böngészőt. Látnia kell a módosítást.
Távolítsa el a
node:lts-alpinetárolót.appA mappában futtassa a következő parancsot aznode_moduleselőző lépésekben létrehozott mappa eltávolításához.rm -r node_modules
Képrétegek megtekintése
Megtekintheti a képeket alkotó rétegeket.
Futtassa a docker image history parancsot a rendszerkép egyes rétegeinek létrehozásához használt parancs megtekintéséhez.
A
docker image historyhasználatával megtekintheti a korábban az oktatóanyag során létrehozott kezdő kép rétegeit.docker image history getting-startedAz eredménynek ehhez a kimenethez kell hasonlítania.
IMAGE CREATED CREATED BY SIZE COMMENT a78a40cbf866 18 seconds ago /bin/sh -c #(nop) CMD ["node" "/app/src/ind… 0B f1d1808565d6 19 seconds ago /bin/sh -c yarn install --production 85.4MB a2c054d14948 36 seconds ago /bin/sh -c #(nop) COPY dir:5dc710ad87c789593… 198kB 9577ae713121 37 seconds ago /bin/sh -c #(nop) WORKDIR /app 0B b95baba1cfdb 13 days ago /bin/sh -c #(nop) CMD ["node"] 0B <missing> 13 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B <missing> 13 days ago /bin/sh -c #(nop) COPY file:238737301d473041… 116B <missing> 13 days ago /bin/sh -c apk add --no-cache --virtual .bui… 5.35MB <missing> 13 days ago /bin/sh -c #(nop) ENV YARN_VERSION=1.21.1 0B <missing> 13 days ago /bin/sh -c addgroup -g 1000 node && addu… 74.3MB <missing> 13 days ago /bin/sh -c #(nop) ENV NODE_VERSION=12.14.1 0B <missing> 13 days ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 13 days ago /bin/sh -c #(nop) ADD file:e69d441d729412d24… 5.59MBAz egyes vonalak a kép egy rétegét jelölik. A kimenet azt mutatja, hogy alul van az alap, felül pedig a legújabb réteg. Ezen információk segítségével megtekintheti az egyes rétegek méretét, és segíthet a nagyméretű képek diagnosztizálásában.
Több sor levágott. Ha hozzáadja a
--no-truncparamétert, a teljes kimenetet megkapja.docker image history --no-trunc getting-started
Gyorsítótár-függőségek
Ha egy réteg megváltozik, az összes alsó réteget újra létre kell hozni. Íme ismét a Dockerfile:
FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "/app/src/index.js"]
A Dockerfile minden parancsa új réteget hoz létre a képben.
A rétegek számának minimalizálása érdekében a Dockerfile átstrukturálásával lehetővé teheti a függőségek gyorsítótárazását.
Csomópontalapú alkalmazások esetén ezek a függőségek a package.json fájlban vannak definiálva.
A módszer az, hogy először csak ezt a fájlt másolja, telepítse a függőségeket, majd majd másoljon minden mást.
A folyamat csak akkor hozza létre újra a fonalfüggőségeket, ha történt módosítás a package.json-ban.
Frissítse a Dockerfile fájlt úgy, hogy először másolja a
package.jsonelemet, telepítse a függőségeket, majd másoljon mindent mást. Az új fájl a következő:FROM node:lts-alpine WORKDIR /app COPY package.json yarn.lock ./ RUN yarn install --production COPY . . CMD ["node", "/app/src/index.js"]Új kép létrehozása
docker buildhasználatával.docker build -t getting-started .A kimenetnek a következő eredményekhez hasonlóan kell megjelennie:
Sending build context to Docker daemon 219.1kB Step 1/6 : FROM node:lts-alpine ---> b0dc3a5e5e9e Step 2/6 : WORKDIR /app ---> Using cache ---> 9577ae713121 Step 3/6 : COPY package* yarn.lock ./ ---> bd5306f49fc8 Step 4/6 : RUN yarn install --production ---> Running in d53a06c9e4c2 yarn install v1.17.3 [1/4] Resolving packages... [2/4] Fetching packages... info fsevents@1.2.9: The platform "linux" is incompatible with this module. info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... [4/4] Building fresh packages... Done in 10.89s. Removing intermediate container d53a06c9e4c2 ---> 4e68fbc2d704 Step 5/6 : COPY . . ---> a239a11f68d8 Step 6/6 : CMD ["node", "/app/src/index.js"] ---> Running in 49999f68df8f Removing intermediate container 49999f68df8f ---> e709c03bc597 Successfully built e709c03bc597 Successfully tagged getting-started:latestMinden réteg újjá lett építve. Ez az eredmény azért várható, mert megváltoztatta a Dockerfile.
Módosítsa a src/static/index.html. Például módosítsa a címet úgy, hogy "The Awesome Todo App".
Hozza létre a Docker-rendszerképet most újra
docker buildhasználatával. Ezúttal a kimenetnek egy kicsit másnak kell kinéznie.Sending build context to Docker daemon 219.1kB Step 1/6 : FROM node:lts-alpine ---> b0dc3a5e5e9e Step 2/6 : WORKDIR /app ---> Using cache ---> 9577ae713121 Step 3/6 : COPY package* yarn.lock ./ ---> Using cache ---> bd5306f49fc8 Step 4/6 : RUN yarn install --production ---> Using cache ---> 4e68fbc2d704 Step 5/6 : COPY . . ---> cccde25a3d9a Step 6/6 : CMD ["node", "/app/src/index.js"] ---> Running in 2be75662c150 Removing intermediate container 2be75662c150 ---> 458e5c6f080c Successfully built 458e5c6f080c Successfully tagged getting-started:latestMivel a build gyorsítótárat használja, ennek sokkal gyorsabban kell mennie.
Többfázisú buildek
A többfázisú építések hihetetlenül hatékony eszközök, amely több szakasz használatát teszi lehetővé a rendszerkép létrehozásához. Számos előnye van számukra:
- Build-time függőségek elkülönítése a futtatókörnyezeti függőségektől
- Csökkentse az általános képméretet úgy, hogy csak azt szállítja, amit az alkalmazásnak futtatnia kell
Ez a szakasz rövid példákat tartalmaz.
Maven/Tomcat-példa
Java-alapú alkalmazások létrehozásakor JDK-ra van szükség a forráskód Java-bájtkódra való fordításához. A JDK-ra nincs szükség az éles környezetben. Előfordulhat, hogy olyan eszközöket használ, mint a Maven vagy a Gradle az alkalmazás létrehozásához. Ezekre az eszközökre a végső képen sincs szükség.
FROM maven AS build
WORKDIR /app
COPY . .
RUN mvn package
FROM tomcat
COPY --from=build /app/target/file.war /usr/local/tomcat/webapps
Ez a példa egy szakaszt használ, builda tényleges Java-build végrehajtásához a Maven használatával.
A második szakasz, a "FROM tomcat" kezdetű, fájlokat másol a build szakaszból.
A végső kép csak az utolsó fázis, amelyet felül lehet bírálni a --target paraméterrel.
React példa
A React-alkalmazások létrehozásakor node-környezetre van szükség a JavaScript-kód, a Sass-stíluslapok és egyebek statikus HTML-, JavaScript- és CSS-fájlba való fordításához. Ha nem végez kiszolgálóoldali renderelést, akkor még Node környezetre sincs szüksége az éles buildhez.
FROM node:lts-alpine AS build
WORKDIR /app
COPY package* yarn.lock ./
RUN yarn install
COPY public ./public
COPY src ./src
RUN yarn run build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
Ez a példa egy node:lts-alpine rendszerképet használ a build végrehajtásához, amely maximalizálja a réteg gyorsítótárazását, majd átmásolja a kimenetet egy nginx tárolóba.
Erőforrások törlése
Az oktatóanyagok sorozatának folytatásához tartsa meg az eddig elvégzett feladatokat.
Következő lépések
Megismerhette a tárolóalkalmazások adatainak megőrzésének lehetőségeit.
Mi a következő lépés?
Több tároló használata a Docker Compose használatával:
Többtárolós alkalmazások létrehozása a MySQL és a Docker Compose segítségével
Üzembe helyezés az Azure Container Appsben:
Üzembe helyezés az Azure App Service-ben