Oktatóanyag: Tárolólemezképek buildelése és üzembe helyezése a felhőben az Azure Container Registry Tasks használatával
Az ACR Tasks az Azure Container Registry egy szolgáltatáscsomagja, amely lehetővé teszi a Docker-tárolórendszerképek zökkenőmentes és hatékony összeállítását az Azure-ban. Ebben a cikkben az ACR Tasks gyors feladat funkciójának használatával ismerkedhet meg.
A „belső” fejlesztési ciklus a kódírás, alkalmazás-összeállítás és alkalmazástesztelés ismétlődő folyamata a verziókövetésbe küldés előtt. A gyors feladat funkció kiterjeszti a „belső” fejlesztési ciklust a felhőre, és lehetővé teszi az összeállítások sikerességének ellenőrzését, valamint a sikeresen összeállított rendszerképek automatikus leküldését a tárolóregisztrációs adatbázisba. A rendszerképek összeállítása natív módon a felhőben történik, a regisztrációs adatbázis közelében, ami meggyorsítja az üzembe helyezést.
A Docker-fájlokkal kapcsolatos ismeretek közvetlenül kamatoztathatók az ACR Tasks használata során. A Docker-fájlokat nem, csupán a futtatott parancsot kell módosítani, ha az ACR Tasks segítségével szeretne a felhőben összeállítást végrehajtani.
Ez az oktatóanyag egy sorozat első része, és az alábbiakat ismerteti:
- Mintaalkalmazás forráskódjának lekérése
- Tárolórendszerkép összeállítása az Azure-ban
- Tároló üzembe helyezése az Azure Container Instances szolgáltatásban
A további oktatóanyagokban elsajátítja majd, hogyan lehet az ACR Tasks segítségével automatizálni a tárolórendszerképek összeállítását kódvéglegesítés, illetve az alapként szolgáló rendszerképek frissítése alkalmával. Az ACR-feladatok többlépéses feladatokat is futtathatnak egy YAML-fájl használatával a több tároló összeállításának, leküldésének és opcionális tesztelésének lépéseinek meghatározásához.
Előfeltételek
GitHub-fiók
Hozzon létre egy fiókot a https://github.com webhelyen, ha még nem rendelkezik fiókkal. Ebben az oktatóanyag-sorozatban egy GitHub-adattárat használunk az ACR Tasks automatizált rendszerkép-összeállítási képességeinek bemutatásához.
Mintaadattár leágaztatása
Ezután a GitHub felhasználói felületén ágaztassa le a mintaadattárat a GitHub-fiókba. Ebben az oktatóanyagban egy tárolórendszerképet állít össze az adattárban lévő forrásból, a következő oktatóanyagban pedig egy véglegesítést küld le a leágaztatott adattárba egy automatizált feladat elindítása céljából.
Ágaztassa le ezt az adattárat: https://github.com/Azure-Samples/acr-build-helloworld-node.
A leágaztatás klónozása
Miután leágaztatta az adattárat, klónozza a leágaztatást, és lépjen a helyi klónt tartalmazó könyvtárba.
Klónozza az adattárat a következővel git
: , cserélje le <a saját-github-username> azonosítóját a GitHub-felhasználónévre:
git clone https://github.com/<your-github-username>/acr-build-helloworld-node
Lépjen a forráskódot tartalmazó könyvtárba:
cd acr-build-helloworld-node
Bash-felület
Az oktatóanyag-sorozatban használt parancsok a Bash-felületnek megfelelően vannak formázva. Ha inkább a PowerShellt, a parancssort vagy egy másik rendszerhéjat szeretne használni, ennek megfelelően esetleg módosítania kell a sorok tartalmát és a környezeti változók formátumát.
A környezet előkészítése az Azure CLI-hez
Használja a Bash-környezetet az Azure Cloud Shell. További információ: Rövid útmutató a Bashhez az Azure Cloud Shell-ben.
Ha helyileg szeretné futtatni a PARANCSSOR-referenciaparancsokat, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd: Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
Összeállítás az Azure-ban az ACR Tasks használatával
Miután lekérte a forráskódot a gépre, az alábbi lépéseket követve hozzon lére egy tárolóregisztrációs adatbázist, és állítsa össze a tárolórendszerképet az ACR Tasks használatával.
A mintaparancsok könnyebb végrehajtása érdekében a sorozat oktatóanyagai rendszerhéj-környezeti változókat használnak. Futtassa a következő parancsot az ACR_NAME
változó beállításához. Cserélje le <a beállításjegyzék-nevet> az új tárolóregisztrációs adatbázis egyedi nevére. A beállításjegyzék nevének egyedinek kell lennie az Azure-ban, csak kisbetűket tartalmaz, és 5–50 alfanumerikus karaktert tartalmaz. Az oktatóanyagban létrehozott egyéb erőforrások is ezen néven alapulnak, így csak ezt az első változót kell módosítania.
ACR_NAME=<registry-name>
Miután a tárolóregisztrációs adatbázis környezeti változóját ellátta értékkel, az oktatóanyagban szereplő többi parancsot az értékek szerkesztése nélkül másolhatja és beillesztheti. Futtassa az alábbi parancsokat egy erőforráscsoport és egy tárolóregisztrációs adatbázis létrehozásához.
RES_GROUP=$ACR_NAME # Resource Group name
az group create --resource-group $RES_GROUP --location eastus
az acr create --resource-group $RES_GROUP --name $ACR_NAME --sku Standard --location eastus
Miután a regisztrációs adatbázis létrejött, az ACR Tasks használatával állítson össze egy tárolórendszerképet a mintakódból. Hajtsa végre az az acr buildelési parancsot egy gyors feladat végrehajtásához.
Megjegyzés
Az alábbi példában használt Dockerfile egy nyilvános alap tárolórendszerképtől függ Docker Hub. A nyilvános tartalom használatakor a megbízhatóság javítása érdekében importálja és kezeli a lemezképet egy privát Azure-tárolóregisztrációs adatbázisban, és frissítse a Docker-fájlt a privátan felügyelt alaprendszerkép használatára. További információ a nyilvános rendszerképek használatával kapcsolatban.
az acr build --registry $ACR_NAME --image helloacrtasks:v1 --file /path/to/Dockerfile /path/to/build/context.
Az az acr build parancs kimenete az alábbihoz hasonló. Láthatja a forráskód (a „környezet”) feltöltését az Azure-ba, valamint az ACR Tasks által a felhőben futtatott docker build
művelet részleteit. Mivel az ACR Tasks a docker build
használatával állítja össze a rendszerképeket, a Docker-fájlokat nem kell módosítani az ACR Tasks használatának azonnali megkezdéséhez.
Packing source code into tar file to upload...
Sending build context (4.813 KiB) to ACR...
Queued a build with build ID: da1
Waiting for build agent...
2020/11/18 18:31:42 Using acb_vol_01185991-be5f-42f0-9403-a36bb997ff35 as the home volume
2020/11/18 18:31:42 Setting up Docker configuration...
2020/11/18 18:31:43 Successfully set up Docker configuration
2020/11/18 18:31:43 Logging in to registry: myregistry.azurecr.io
2020/11/18 18:31:55 Successfully logged in
Sending build context to Docker daemon 21.5kB
Step 1/5 : FROM node:15-alpine
15-alpine: Pulling from library/node
Digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
Status: Image is up to date for node:15-alpine
---> a56170f59699
Step 2/5 : COPY . /src
---> 88087d7e709a
Step 3/5 : RUN cd /src && npm install
---> Running in e80e1263ce9a
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN helloworld@1.0.0 No repository field.
up to date in 0.1s
Removing intermediate container e80e1263ce9a
---> 26aac291c02e
Step 4/5 : EXPOSE 80
---> Running in 318fb4c124ac
Removing intermediate container 318fb4c124ac
---> 113e157d0d5a
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in fe7027a11787
Removing intermediate container fe7027a11787
---> 20a27b90eb29
Successfully built 20a27b90eb29
Successfully tagged myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:11 Pushing image: myregistry.azurecr.io/helloacrtasks:v1, attempt 1
The push refers to repository [myregistry.azurecr.io/helloacrtasks]
6428a18b7034: Preparing
c44b9827df52: Preparing
172ed8ca5e43: Preparing
8c9992f4e5dd: Preparing
8dfad2055603: Preparing
c44b9827df52: Pushed
172ed8ca5e43: Pushed
8dfad2055603: Pushed
6428a18b7034: Pushed
8c9992f4e5dd: Pushed
v1: digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1 size: 1366
2020/11/18 18:32:43 Successfully pushed image: myregistry.azurecr.io/helloacrtasks:v1
2020/11/18 18:32:43 Step ID acb_step_0 marked as successful (elapsed time in seconds: 15.648945)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloacrtasks
tag: v1
digest: sha256:b038dcaa72b2889f56deaff7fa675f58c7c666041584f706c783a3958c4ac8d1
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 15-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git: {}
Run ID: da1 was successful after 1m9.970148252s
A kimenet vége felé az ACR Tasks a rendszerkép észlelt függőségeit jeleníti meg. Ez lehetővé teszi az ACR Tasks számára a rendszerképek összeállításának automatikus elindítását az alapként szolgáló rendszerképek frissítésekor, például amikor az alapul szolgáló rendszerképet az operációs rendszer vagy a keretrendszer javításával frissítették. Az oktatóanyag-sorozat egy későbbi része ismerteti, hogy az ACR Tasks hogyan támogatja az alapként szolgáló rendszerképek frissítését.
Üzembe helyezés az Azure Container Instances szolgáltatásban
Az ACR Tasks alapértelmezés szerint automatikusan leküldi a sikeresen összeállított rendszerképeket a regisztrációs adatbázisba, így Ön onnan azonnal üzembe helyezheti azokat.
Ebben a szakaszban létrehoz egy Azure Key Vault kulcstárolót és egy szolgáltatásnevet, majd üzembe helyezi a tárolót az Azure Container Instances (ACI) szolgáltatásban a szolgáltatásnév hitelesítő adataival.
Regisztrációs adatbázis hitelesítésének konfigurálása
Az Azure-beli tárolóregisztrációs adatbázisok eléréséhez minden éles forgatókönyvben szolgáltatásneveket ajánlott használni. A szolgáltatásnevek lehetővé teszik a szerepköralapú hozzáférés-vezérlés biztosítását a tárolórendszerképek számára. Konfigurálhat például egy olyan szolgáltatásnevet, amely csak lekérés céljából férhet hozzá a regisztrációs adatbázishoz.
Kulcstartó létrehozása
Ha még nem rendelkezik tárolóval az Azure Key Vaultban, hozzon létre egyet az Azure CLI alábbi parancsaival.
AKV_NAME=$ACR_NAME-vault
az keyvault create --resource-group $RES_GROUP --name $AKV_NAME
Szolgáltatásnév létrehozása és a hitelesítő adatok tárolása
Létre kell hoznia egy szolgáltatásnevet, és el kell tárolnia annak hitelesítő adatait a kulcstárolóban.
Az az ad sp create-for-rbac paranccsal hozza létre a szolgáltatásnevet, és az az keyvault titkos kódkészlettel tárolja a szolgáltatásnév jelszavát a tárolóban. A következő parancsokhoz használja az Azure CLI 2.25.0-s vagy újabb verzióját:
# Create service principal, store its password in AKV (the registry *password*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-pwd \
--value $(az ad sp create-for-rbac \
--name $ACR_NAME-pull \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role acrpull \
--query password \
--output tsv)
Az --role
előző parancs argumentuma konfigurálja a szolgáltatásnevet az acrpull szerepkörrel, amely csak lekéréses hozzáférést biztosít a beállításjegyzékhez. A leküldéses és a lekéréses hozzáférés megadásához módosítsa az --role
argumentumot acrpush értékre.
Ezután tárolja el a szolgáltatásnév appId azonosítóját a tárolóban, amely az Azure Container Registry szolgáltatásban a hitelesítéskor megadandó felhasználónév lesz:
# Store service principal ID in AKV (the registry *username*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-usr \
--value $(az ad sp list --display-name $ACR_NAME-pull --query [].appId --output tsv)
Létrehozott egy Azure Key Vault-tárolót, és eltárolt benne két titkos kulcsot:
$ACR_NAME-pull-usr
: A szolgáltatásnév azonosítója, amely a tárolóregisztrációs adatbázis felhasználóneveként szolgál.$ACR_NAME-pull-pwd
: A szolgáltatásnév jelszava, amely a tárolóregisztrációs adatbázis jelszavaként szolgál.
Innentől ezekre a titkos kulcsokra név alapján hivatkozhat, amikor Ön vagy az alkalmazások és szolgáltatások rendszerképeket kérnek le a regisztrációs adatbázisból.
Tároló üzembe helyezése az Azure CLI használatával
Miután a szolgáltatásnév hitelesítő adatait titkos kulcsként mentette az Azure Key Vaultban, az alkalmazások és a szolgáltatások a kulcsok használatával hozzáférhetnek a privát regisztrációs adatbázishoz.
A következő az container create parancs végrehajtásával helyezzen üzembe egy tárolópéldányt. A parancs a szolgáltatásnévnek az Azure Key Vault-tárolóban tárolt hitelesítő adatait használja a tárolóregisztrációs adatbázisban való hitelesítéshez.
az container create \
--resource-group $RES_GROUP \
--name acr-tasks \
--image $ACR_NAME.azurecr.io/helloacrtasks:v1 \
--registry-login-server $ACR_NAME.azurecr.io \
--registry-username $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-usr --query value -o tsv) \
--registry-password $(az keyvault secret show --vault-name $AKV_NAME --name $ACR_NAME-pull-pwd --query value -o tsv) \
--dns-name-label acr-tasks-$ACR_NAME \
--query "{FQDN:ipAddress.fqdn}" \
--output table
A --dns-name-label
értékének egyedinek kell lennie az Azure-ban, így az előző parancs hozzáfűzi a tárolóregisztrációs adatbázis nevét a tároló DNS-nevének címkéjéhez. A parancs kimenete a tároló teljes tartománynevét jeleníti meg, például:
FQDN
----------------------------------------------
acr-tasks-myregistry.eastus.azurecontainer.io
Jegyezze fel a tároló teljes tartománynevét, amelyet a következő szakaszban fog használni.
Az üzemelő példány ellenőrzése
A tároló indítási folyamatának megtekintéséhez használja az az container attach parancsot:
az container attach --resource-group $RES_GROUP --name acr-tasks
A az container attach
kimenet először megjeleníti a tároló állapotát, amint lekéri a lemezképet, és elindul, majd a helyi konzol STDOUT-ját és STDERR-jét a tárolóhoz köti.
Container 'acr-tasks' is in state 'Running'...
(count: 1) (last timestamp: 2020-11-18 18:39:10+00:00) pulling image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:15+00:00) Successfully pulled image "myregistry.azurecr.io/helloacrtasks:v1"
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Created container
(count: 1) (last timestamp: 2020-11-18 18:39:17+00:00) Started container
Start streaming logs:
Server running at http://localhost:80
Amikor megjelenik a Server running at http://localhost:80
üzenet, adja meg a tároló teljes tartománynevét a böngészőben a futó alkalmazás megtekintéséhez. A teljes tartománynévnek meg kell jelennie az előző szakaszban végrehajtott az container create
parancs kimenetében.
A konzolt a Control+C
billentyűkombinációval választhatja le a tárolóról.
Az erőforrások eltávolítása
Állítsa le a tárolópéldányt az az container delete paranccsal:
az container delete --resource-group $RES_GROUP --name acr-tasks
Az oktatóanyagban létrehozott összes erőforrás, így a tárolóregisztrációs adatbázis, a kulcstároló és a szolgáltatásnév eltávolításához hajtsa végre az alábbi parancsokat. Ezeket az erőforrásokat azonban a sorozat következő oktatóanyagában is használjuk majd, ezért érdemes megtartani azokat, ha egyből továbblép a következő oktatóanyagra.
az group delete --resource-group $RES_GROUP
az ad sp delete --id http://$ACR_NAME-pull
Következő lépések
Miután egy gyors feladattal tesztelte a belső ciklust, konfiguráljon egy összeállítási feladatot a tárolórendszerképek összeállításának automatikus aktiválására, amikor forráskódot véglegesít egy Git-adattárban: