教學課程:在 Azure Container Apps 中建立 Azure 檔案儲存體 磁碟區掛接
瞭解如何使用 Azure 檔案儲存體 記憶體掛接,寫入容器應用程式中的永久記憶體。 如需記憶體掛接的詳細資訊,請參閱 在 Azure Container Apps 中使用記憶體掛接。
在本教學課程中,您會了解如何:
- 建立容器應用程式環境
- 建立 Azure 儲存體帳戶
- 在記憶體帳戶中定義檔案共用
- 將環境連結至記憶體檔案共用
- 在個別容器中掛接記憶體共用
- 檢視網站存取記錄來確認記憶體掛接
注意
Azure Container Apps 支援使用 SMB 和 NFS 通訊協定掛接檔案共用。 本教學課程示範如何使用SMB通訊協定掛接 Azure 檔案儲存體共用。 若要深入瞭解掛接 NFS 共用,請參閱 在 Azure Container Apps 中使用記憶體掛接。
必要條件
- 安裝最新版的 Azure CLI。
設定環境
下列命令可協助您定義變數,並確定您的 Container Apps 擴充功能是最新的。
登入 Azure CLI。
az login
設定用於各種命令中要遵循的環境變數。
RESOURCE_GROUP="my-container-apps-group" ENVIRONMENT_NAME="my-storage-environment" LOCATION="canadacentral"
請確定您有最新版的 Container Apps Azure CLI 擴充功能。
az extension add -n containerapp --upgrade
註冊
Microsoft.App
命名空間。az provider register --namespace Microsoft.App
如果您之前未曾使用過,請註冊 Azure 監視器 Log Analytics 工作區的
Microsoft.OperationalInsights
提供者。az provider register --namespace Microsoft.OperationalInsights
建立環境
下列步驟會建立資源群組和 Container Apps 環境。
建立資源群組。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState"
建立之後,命令會傳回「成功」訊息。
在本教學課程結束時,您可以刪除資源群組,以移除本文期間建立的所有服務。
建立容器應用程式環境。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
建立之後,命令會傳回「成功」訊息。
儲存體 掛接會與容器應用程式環境相關聯,並在個別容器應用程式中設定。
設定記憶體帳戶
接下來,建立記憶體帳戶,並建立要掛接至容器應用程式的檔案共用。
定義記憶體帳戶名稱。
此命令會產生記憶體帳戶名稱的隨機後綴,以確保唯一性。
STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
建立 Azure 儲存體帳戶。
az storage account create \ --resource-group $RESOURCE_GROUP \ --name $STORAGE_ACCOUNT_NAME \ --location "$LOCATION" \ --kind StorageV2 \ --sku Standard_LRS \ --enable-large-file-share \ --query provisioningState
建立之後,命令會傳回「成功」訊息。
定義檔案共享名稱。
STORAGE_SHARE_NAME="myfileshare"
建立 Azure 儲存體 檔案共用。
az storage share-rm create \ --resource-group $RESOURCE_GROUP \ --storage-account $STORAGE_ACCOUNT_NAME \ --name $STORAGE_SHARE_NAME \ --quota 1024 \ --enabled-protocols SMB \ --output table
取得記憶體帳戶金鑰。
STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
您必須有記憶體帳戶密鑰,才能在 Container Apps 環境中建立記憶體連結。
定義記憶體掛接名稱。
STORAGE_MOUNT_NAME="mystoragemount"
這個值是用來定義容器應用程式環境到 Azure 儲存體 帳戶之記憶體掛接連結的名稱。
建立記憶體掛接
現在您可以更新容器應用程式組態以支援記憶體掛接。
在環境中建立記憶體連結。
az containerapp env storage set \ --access-mode ReadWrite \ --azure-file-account-name $STORAGE_ACCOUNT_NAME \ --azure-file-account-key $STORAGE_ACCOUNT_KEY \ --azure-file-share-name $STORAGE_SHARE_NAME \ --storage-name $STORAGE_MOUNT_NAME \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --output table
此命令會在容器應用程式環境與使用 命令建立的
az storage share-rm
檔案共享之間建立連結。既然記憶體帳戶和環境已連結,您可以建立使用記憶體掛接的容器應用程式。
定義容器應用程式名稱。
CONTAINER_APP_NAME="my-container-app"
建立容器應用程式。
az containerapp create \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT_NAME \ --image nginx \ --min-replicas 1 \ --max-replicas 1 \ --target-port 80 \ --ingress external \ --query properties.configuration.ingress.fqdn
此命令會顯示新容器應用程式的URL。
複製 URL 並貼到網頁瀏覽器中,以瀏覽至網站。
頁面載入之後,您會看到「歡迎使用 nginx!」訊息。 保持開啟此瀏覽器索引標籤。 您將在記憶體掛接驗證步驟期間返回網站。
既然您已確認容器應用程式已設定,您可以使用記憶體掛接定義將應用程式更新為 。
匯出容器應用程式的設定。
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --output yaml > app.yaml
注意
雖然此應用程式沒有秘密,但許多應用程式都會執行功能秘密。 根據預設,當您匯出應用程式的組態時,產生的 YAML 中不會包含秘密的值。
如果您不需要變更秘密值,則可以移除
secrets
區段,而您的秘密仍維持不變。 或者,如果您需要變更秘密的值,請務必在嘗試更新應用程式之前,先提供name
檔案中所有秘密的 和value
。 省略區段中的secrets
秘密會刪除秘密。在程式代碼編輯器中開啟 app.yaml 。
將
volumes: null
區段中的定義template
取代為volumes:
參考記憶體磁碟區的定義。 範本區段看起來應該如下所示:template: volumes: - name: my-azure-file-volume storageName: mystoragemount storageType: AzureFile containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx resources: cpu: 0.5 ephemeralStorage: 3Gi memory: 1Gi initContainers: null revisionSuffix: '' scale: maxReplicas: 1 minReplicas: 1 rules: null
新的
template.volumes
區段包含下列屬性。屬性 說明 name
這個值會比對呼叫 命令所建立的磁碟區 az containerapp env storage set
。storageName
此值會定義環境中容器用來存取記憶體磁碟區的名稱。 storageType
這個值會決定為環境定義的記憶體磁碟區類型。 在此情況下,會宣告 Azure 檔案儲存體 掛接。 區
volumes
段會定義應用程式層級的磁碟區,讓應用程式容器或 Sidecar 容器可以透過volumeMounts
與容器相關聯的區段來參考。將區
volumeMounts
段新增至 區段中的containers
nginx
容器。containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx
新的
volumeMounts
區段包含下列屬性:屬性 說明 volumeName
此值必須符合定義中 volumes
定義的名稱。mountPath
此值會定義容器中掛接記憶體的路徑。 使用新的記憶體掛接組態更新容器應用程式。
az containerapp update \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --yaml app.yaml \ --output table
確認記憶體掛接
現在已建立記憶體掛接,您可以從容器操作 Azure 儲存體 中的檔案。 使用下列命令來觀察工作的記憶體掛接。
開啟容器應用程式內的互動式殼層,以在執行中的容器內執行命令。
az containerapp exec \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP
此命令可能需要一些時間才能開啟遠端殼層。 殼層準備就緒後,您可以透過文件系統命令與記憶體掛接互動。
變更為 nginx /var/log/nginx 資料夾。
cd /var/log/nginx
返回瀏覽器並流覽至網站並重新整理頁面幾次。
對網站提出的要求會建立一系列記錄數據流專案。
返回終端機並列出資料夾的值
/var/log/nginx
。ls
請注意access.log和error.log檔案如何出現在此資料夾中。 這些檔案會寫入您在先前步驟中建立 Azure 儲存體 共用中的 Azure 檔案儲存體 掛接。
檢視access.log檔案的內容。
cat access.log
結束容器的互動式殼層,以返回您的本機終端機會話。
exit
現在,您可以檢視 Azure 入口網站 中的檔案,以確認檔案存在於您的 Azure 儲存體 帳戶中。 列印隨機產生的記憶體帳戶名稱。
echo $STORAGE_ACCOUNT_NAME
流覽至 Azure 入口網站,然後開啟在此程式中建立的記憶體帳戶。
在 [數據 儲存體 選取 [檔案共享]。
選取 myshare 以檢視 access.log 和 error.log 檔案。
清除資源
如果您不打算繼續使用此應用程式,請執行下列命令來刪除資源群組以及本文中建立的所有資源。
az group delete \
--name $RESOURCE_GROUP