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.
Ez a cikk azt ismerteti, hogyan hozhat létre többtárolós alkalmazásokat MySQL- és Docker Compose. A több tárolóval rendelkező alkalmazások lehetővé teszik a tárolók speciális feladatokra való felosztását, így minden tároló egyetlen tevékenységre összpontosíthat. A többtárolós alkalmazások használatának számos előnye van:
- A különálló tárolók lehetővé teszik, hogy az API-kat és az előtérbeli erőforrásokat az adatbázisoktól eltérő módon kezelje.
- Több tárolóval elkülönítve végezhet verziózást és frissítést.
- A helyi adatbázisokat fenntarthatjuk tárolókban, továbbá az éles környezetben lévő adatbázisokhoz felügyelt szolgáltatásokat használhatunk.
- A többtárolós alkalmazások hatékonyabbak, mint több folyamat futtatása egy folyamatkezelővel, ami összetettebbé teszi a tárolóindítást/leállítást.
Ebben az oktatóanyagban ön:
- A MySQL indítása
- Többtárolós alkalmazás futtatása a MySQL-lel
- Docker Compose-fájl létrehozása az alkalmazáshoz
- Az alkalmazásverem futtatása a Docker Compose használatával
Előfeltételek
Ez a cikk egy oktatóanyag-sorozat része. Az eljárások egy bevált példán alapulnak, amely megköveteli Docker Desktop Linux-tárolókhoz.
Az ajánlott módszer az első oktatóanyag elvégzése, tárolóalkalmazás létrehozása, beleértve az előfeltételek teljesítését, valamint az adatok megőrzése az alkalmazásban című oktatóanyagot. Az oktatóanyagok elvégzése után folytassa a cikkben ismertetett eljárásokkal.
A cikkben szereplő példa Docker Composehasznál.
Visual Studio Code
Ez az oktatóanyag-sorozat a Visual Studio Code (VS Code) eljárásait ismerteti. Tekintse át a következő szempontokat a környezetben való munkavégzéshez:
A bal oldali menüben válthat a CONTAINER EXPLORER vagy az EXPLORER (fájl és mappa) nézet között:
Nyisson meg egy parancssori ablakot a VS Code-ban a Terminál>Új terminálkiválasztásával. Használhatja a Ctrl+Shift+` (visszajel) billentyűparancsot is.
Ha másként nincs megadva, futtassa a parancsokat egy Bash-ablakban. A
Bashcímkével ellátott parancsok többsége Bash-ablakban vagy a VS Code parancssori ablakában fut.
MySQL-adatbázis-kezelő rendszer indítása
Alapértelmezés szerint a tárolók elszigetelten futnak. A tárolók nem tudnak más folyamatokról vagy más tárolókról ugyanazon a számítógépen.
A tárolók közötti kommunikáció engedélyezéséhez ugyanahhoz a hálózathoz kell csatlakozniuk. Ugyanazon a hálózaton több tároló is megoszthat adatokat és feldolgozhatja az adatokat egymással.
A tárolók hálózati csatlakoztatásának két módja van. A létrehozás során tárolót csatolhat egy hálózathoz, vagy később egy meglévő tárolót is csatolhat egy hálózathoz.
Ebben a példában a hálózatot hozza létre, és indításkor csatolja a MySQL-tárolót.
Hozzon létre egy
todo-appnevű hálózatot:docker network create todo-appIndítsa el a
todo-mysql-datanevű MySQL-tárolót, és csatolja azt atodo-apphálózathoz. A parancs létrehoz egy hálózati aliastmysqla MySQL-adatbázishoztodos.A parancs futtatásakor adja meg a MySQL-gyökérjelszót a
<your-password>helyőrzőhöz.docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<your-password> -e MYSQL_DATABASE=todos mysql:ltsEz a parancs a
MYSQL_ROOT_PASSWORDésMYSQL_DATABASEkörnyezeti változókat is meghatározza. További információért lásd a MySQL Docker Hub jegyzéket.Figyelmeztetés
Ez az oktatóanyag bemutatja a jelszó hitelesítő adatait a MySQL-adatbázissal való hitelesítéshez, amely nem a legbiztonságosabb módszer. A biztonságosabb hitelesítési módszerekről a MySQL dokumentációjában tájékozódhat.
Kérje le a tárolóazonosítót a következő lépésben való használatra.
docker psGyőződjön meg arról, hogy csatlakozhat a tárolóhoz a
mysqlhálózaton.A parancs futtatásakor adja meg a konténerazonosítót a
<mysql-container-id>helyőrzőhöz.docker exec -it <mysql-container-id> mysql -pA parancssorba írja be a
todo-mysql-datatároló létrehozásakor megadott jelszót.A MySQL-rendszerhéjban listázhatja az adatbázisokat, és ellenőrizheti, hogy megjelenik-e az
todosadatbázis.SHOW DATABASES;A következő kimenetnek kell megjelennie:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | todos | +--------------------+ 5 rows in set (0.00 sec)A kapcsolat befejezéséhez és a parancssorhoz való visszatéréshez írja be a kilépésparancsot.
Az alkalmazás futtatása a MySQL-lel
A todo alkalmazás támogatja bizonyos környezeti változók beállítását a MySQL-kapcsolat beállításainak megadásához. Az alábbi táblázat a támogatott változókat és az ebben a szakaszban bemutatott példában használt értékeket sorolja fel.
| Változó neve | Példaérték | Leírás |
|---|---|---|
MYSQL_HOST |
mysql |
A MySQL-kiszolgáló állomásneve. |
MYSQL_USER |
root |
A kapcsolathoz használandó felhasználónév. |
MYSQL_PASSWORD |
<your-password> |
A kapcsolathoz használandó jelszó. Ebben a példában cserélje le a <your-password> helyőrzőt a gyökérjelszóra. |
MYSQL_DATABASE |
todos |
A kapcsolat létrejötte után használni kívánt adatbázis neve. |
Figyelmeztetés
A környezeti változók használata a kapcsolati beállítások beállításához elfogadható a fejlesztéshez, de ez a gyakorlat nem ajánlott az alkalmazások éles környezetben való futtatásához. További információ: Miért nem érdemes környezeti változókat használni a titkos adatokhoz.
Biztonságosabb mechanizmus a tárolóvezénylési keretrendszer által biztosított titkos támogatás használata. A legtöbb esetben ezek a titkos kódok fájlokként vannak csatlakoztatva a futó tárolóban.
Az alábbi példában elindítja az alkalmazást, és csatlakoztatja az alkalmazástárolót a MySQL-tárolóhoz.
Futtassa a következő
dockerparancsot. Figyelje meg, hogy a parancs hogyan határozza meg a korábban ismertetett környezeti változókat.A parancs futtatásakor ne felejtse el beírni a MySQL-gyökérjelszót a
<your-password>helyőrzőhöz.docker run -dp 3000:3000 -w /app -v ${PWD}:/app --network todo-app -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=<your-password> -e MYSQL_DB=todos node:lts-alpine sh -c "yarn install && yarn run dev"A VS Code-szerkesztőben nyissa meg a Container Explorert, kattintson a jobb gombbal az alkalmazástárolóra, és válassza a Naplók megtekintése lehetőséget.
A naplókat a parancssorból is megtekintheti a
docker logsparanccsal.Tekintse át a napló kimenetét. Figyelje meg azt a sort, amely azt jelzi, hogy az alkalmazás csatlakozik a MySQL-adatbázishoz:
Connected to mysql db at host mysql.# Previous log messages omitted $ nodemon src/index.js [nodemon] 1.19.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] starting `node src/index.js` Connected to mysql db at host mysql Listening on port 3000Az internetböngészőben nyissa meg a futó alkalmazást:
http://localhost:3000.A futó alkalmazásban adjon hozzá néhány elemet a teendőlistához.
Csatlakozzon a MySQL-tárolóadatbázishoz a
mysqlhálózaton, hogy ellenőrizze az adatbázist.A parancs futtatásakor adja meg a konténerazonosítót a
<mysql-container-id>helyőrzőhöz.docker exec -ti <mysql-container-id> mysql -p todosA parancssorba írja be a
todo-mysql-datatároló létrehozásakor megadott jelszót.A MySQL shellben ellenőrizze, hogy a hozzáadott
todo_itemsatodosadatbázisba lettek-e írva.use todos; select * from todo_items;A következő példához hasonló kimenetnek kell megjelennie:
+--------------------------------------+--------------------+-----------+ | id | name | completed | +--------------------------------------+--------------------+-----------+ | c906ff08-60e6-44e6-8f49-ed56a0853e85 | Do amazing things! | 0 | | 2912a79e-8486-4bc3-a4c5-460793a575ab | Be awesome! | 0 | +--------------------------------------+--------------------+-----------+
Most már rendelkezik egy olyan alkalmazással, amely egy külön tárolóban futó külső adatbázisban tárolja az adatokat. Ez az eljárás bemutatja, hogyan engedélyezheti a tárolók közötti kommunikációt hálózatkezeléssel.
Docker Compose-fájl létrehozása
A Docker Compose segít a többtárolós alkalmazások definiálásában és megosztásában. A Docker Compose-fájlok az összes szükséges szolgáltatást megadják, így egyetlen paranccsal indíthatja el vagy fejezheti be az összes kapcsolódó folyamatot. Az alkalmazásverem definiálható egy Docker Compose-fájlban a projekt adattárának gyökerénél, és a konfigurációt a verziókövetés alatt tarthatja fenn. Ez a megközelítés lehetővé teszi, hogy mások is hozzájáruljanak a projekthez, amikor klónozzák az adattárat.
Az alábbi példában egy Docker Compose-fájlt konfigurál a többtárolós alkalmazáshoz todo.
A
todoalkalmazásprojekt gyökerében hozzon létre egy Docker Compose fájlt docker-compose.ymlnéven.Jegyzet
Alapértelmezés szerint a YAML-séma verziója a legújabb verzióra van állítva. Az alkalmazás futtatásakor, ha a séma verziója elavult, figyelmeztető üzenetet kap. Az aktuális sémaverziók és a kompatibilitási mátrix áttekintéséhez tekintse át Áttekintés (Compose-fájl).
A docker-compose.yml fájlban adja hozzá a következő elemeket. Adja meg az alkalmazásához
name-t, és kezdje meg a futtatni kívántservices(vagy tárolók) listájának az alkalmazáshoz való hozzáadását.name: todo services:A szolgáltatások listája egyedi az alkalmazás számára. Ilyenek például a
app,web,db,proxystb. Egy későbbi lépésben kiterjesztheti aserviceselem definícióját.Borravaló
A behúzás jelentős a .yml fájlokban. Ha a VS Code-ban szerkeszt, az Intellisense a formátum vagy a szintaxis esetleges hibáit jelzi.
Térjen vissza a
servicesfájlban található definícióhoz. Bővítse a definíciót úgy, hogy hozzáad egy bejegyzést aappszolgáltatáselem meghatározásához, amely tartalmazza a tároló rendszerképét.services: app: image: node:lts-alpineA szolgáltatás tetszőleges nevét kiválaszthatja. A név automatikusan hálózati aliassá válik, ami a MySQL-szolgáltatás definiálásakor hasznos.
A
appelem-definíciót bővítse ki, hogy megadjon egy végrehajtandócommand-et.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev"Határozza meg a
ports-t, hogy aappszolgáltatással használhassa. Figyelje meg, hogy ezek a portok megfelelnek az alkalmazás MySQL-lel való futtatásához használt parancs-p 3000:3000argumentumának.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000Azonosítsa a
working_dirmunkakönyvtárat aappszolgáltatás számára, és a megfeleltetettvolumes-t is.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/appDocker Compose-kötetek definiálásakor az aktuális könyvtár alapján használhatunk relatív elérési utakat.
Adja meg
environmentappszolgáltatás parancsainak végrehajtásakor használandó változódefiníciókat.app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todosNe felejtse el megadni a MySQL-gyökérjelszót a
<your-password>helyőrzőhöz.Adja hozzá a MySQL-szolgáltatás
mysqldefinícióját aappszolgáltatásdefiníció után. Adja meg az elemneveket és az értékeket az ábrán látható módon és ugyanazzal a behúzással.services: app: ... mysql: image: mysql:ltsA
mysqlszolgáltatásdefiníció összhangban van azzal a paranccsal, amit korábban a MySQL elindításához használt. A szolgáltatás definiálásakor a rendszer automatikusan megkapja a hálózati aliast.Azonosítsa a
volumesszolgáltatáshoz hozzárendeltmysql.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysqlAdja meg
environmentmysqlszolgáltatás parancsainak végrehajtásakor használandó változódefiníciókat.services: app: ... mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todosNe felejtse el megadni a MySQL-gyökérjelszót a
<your-password>helyőrzőhöz.A teljes alkalmazás kötetleképezésének definiálása. Adjon hozzá egy
volumes:szakaszt aservices:szakasz után, ugyanazzal a behúzással.services: ... volumes: todo-mysql-data:Győződjön meg arról, hogy a kész docker-compose.yml fájl az alábbi példához hasonlóan néz ki. Meg kell jelennie a MySQL-gyökérjelszónak a
<your-password>helyőrzőhöz.name: todo services: app: image: node:lts-alpine command: sh -c "yarn install && yarn run dev" ports: - 3000:3000 working_dir: /app volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: <your-password> MYSQL_DB: todos mysql: image: mysql:lts volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: <your-password> MYSQL_DATABASE: todos volumes: todo-mysql-data:
Az alkalmazásverem futtatása a Docker Compose használatával
Most kipróbálhatja a docker-compose.yml fájl futtatását.
Állítsa le az alkalmazás és az adatbázis futó példányait.
Kövesse az alábbi lépéseket a VS Code-ban:
Nyissa meg a CONTAINER EXPLORERt (Container Tools bővítmény).
Minden futó tárolóhoz kattintson a jobb gombbal a tárolóra, és válassza eltávolítása lehetőséget.
Indítsa el a többtárolós alkalmazást és az összes szolgáltatást.
Kövesse az alábbi lépéseket a VS Code-ban:
Nyissa meg a EXPLORER (fájl és mappa) nézetet.
Kattintson a jobb gombbal a docker-compose.yml fájlra, és válassza a Felíráslehetőséget.
A következő példához hasonló kimenetnek kell megjelennie:
[+] Building 0.0s (0/0) [+] Running 2/2 ✔ Container app-app-1 Started 0.9s ✔ Container app-mysql-1 RunningEz a művelet létrehozza az alkalmazás és a hálózat leképezett kötetét. A Docker Compose alapértelmezés szerint kifejezetten az alkalmazásverem számára hoz létre hálózatot.
Tekintse át a futó konténer naplóit.
Kövesse az alábbi lépéseket a VS Code-ban:
Nyissa meg a CONTAINER EXPLORERt (Container Tools bővítmény).
Kattintson a jobb gombbal az alkalmazástárolóra, és válassza Naplók megtekintéselehetőséget.
A következő példához hasonló kimenetnek kell megjelennie:
mysql_1 | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections. mysql_1 | Version: '5.7.27' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) app_1 | Connected to mysql db at host mysql app_1 | Listening on port 3000A naplók a szolgáltatás nevét és példányszámát jelenítik meg, például
app_1az egyes sorok elején. Ez a formátum segít az üzenetek szolgáltatás és példány szerinti megkülönböztetésében. Az egyes szolgáltatások naplói egyetlen streambe vannak beágyazva. Ezzel a módszerrel figyelheti az időzítéssel kapcsolatos problémákat.Ekkor megnyithatja a futó alkalmazást az internetböngészőben:
http://localhost:3000.
A Docker Compose és a futó tárolók leállítása
Ha végzett az alkalmazással és a tárolókkal, eltávolíthatja őket.
Kövesse az alábbi lépéseket a VS Code-ban:
Nyissa meg a EXPLORER (fájl és mappa) nézetet.
Kattintson a jobb gombbal a docker-compose.yml fájlra, és válassza a Írás lefelélehetőséget.
Ez a művelet leállítja az összes futó tárolót, és eltávolítja a hálózatot.
Alapértelmezés szerint a compose fájlban lévő névvel ellátott kötetek nincsenek eltávolítva. Ha el szeretné távolítani ezeket a köteteket, használhatja a docker-compose down --volumes parancsot.
Erőforrások törlése
Ha az oktatóanyag-sorozatban szereplő előfeltételek összetevőket alkalmazta a telepítésre, újra felhasználhatja a konfigurációt a Későbbi Docker-fejlesztéshez. Nem feltétlenül szükséges semmilyen összetevőt törölni vagy eltávolítani.