练习 - 使用数据卷
默认情况下,Azure 容器实例是无状态的。 如果容器崩溃或停止,其所有状态都会丢失。 若要保存状态使其不受容器生存期限制,必须从外部存储装载卷。
将 Azure 文件共享装载到 Azure 容器实例中,以便可以存储数据并在以后访问它。
创建 Azure 文件共享
创建存储帐户和文件共享。 稍后,可以使文件共享可供 Azure 容器实例访问。
存储帐户需要唯一的名称。 为了方便学习,请运行以下命令,以在 Bash 变量中存储唯一名称:
STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
运行以下
az storage account create
命令,以创建存储帐户:az storage account create \ --resource-group learn-deploy-aci-rg \ --name $STORAGE_ACCOUNT_NAME \ --sku Standard_LRS \ --location eastus
运行以下命令,将存储帐户连接字符串放入名为
AZURE_STORAGE_CONNECTION_STRING
的环境变量中:export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string \ --resource-group learn-deploy-aci-rg \ --name $STORAGE_ACCOUNT_NAME \ --output tsv)
AZURE_STORAGE_CONNECTION_STRING
是 Azure CLI 理解的特殊环境变量。export
部分使此变量可供将在稍后运行的其他 CLI 命令访问。运行此命令,在存储帐户中创建名为 aci-share-demo 的文件共享:
az storage share create --name aci-share-demo
获取存储凭证
要将 Azure 文件共享装载为 Azure 容器实例中的卷,需要下面三个值:
- 存储帐户名称
- 共享名
- 存储帐户访问密钥
你已具有前两个值。 存储帐户名称存储在 STORAGE_ACCOUNT_NAME
Bash 变量中。 你已在上一步骤中指定 aci-share-demo 作为共享名称。 你将在此处获得其余值:存储帐户访问密钥。
运行以下命令来获取存储帐户密钥:
STORAGE_KEY=$(az storage account keys list \ --resource-group learn-deploy-aci-rg \ --account-name $STORAGE_ACCOUNT_NAME \ --query "[0].value" \ --output tsv)
结果存储在名为
STORAGE_KEY
的 Bash 变量中。(可选)将存储密钥打印到控制台。
echo $STORAGE_KEY
部署容器并装载文件共享
要将 Azure 文件共享作为卷装载到容器中,请在创建容器时指定共享和卷装入点。
运行此
az container create
命令,创建要将/aci/logs/
装载到文件共享的容器:az container create \ --resource-group learn-deploy-aci-rg \ --name aci-demo-files \ --image mcr.microsoft.com/azuredocs/aci-hellofiles \ --location eastus \ --ports 80 \ --ip-address Public \ --azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \ --azure-file-volume-account-key $STORAGE_KEY \ --azure-file-volume-share-name aci-share-demo \ --azure-file-volume-mount-path /aci/logs/
运行
az container show
以获取容器的公共 IP 地址:az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo-files \ --query ipAddress.ip \ --output tsv
在浏览器中,导航到容器的 IP 地址。 你会看到以下页面:
在表单中输入一些文本,并选择“提交”。 此操作将创建一个文件,其中包含在 Azure 文件共享中输入的文本。
运行此
az storage file list
命令,显示文件共享中包含的文件:az storage file list -s aci-share-demo -o table
运行
az storage file download
,将文件下载到 Cloud Shell 会话。 将 <filename> 替换为上一步中出现的文件之一:az storage file download -s aci-share-demo -p <filename>
运行
cat
命令以打印文件的内容。cat <filename>
请记住容器退出时数据仍然存在。 可将文件共享装载到其他容器实例,使该数据可供它们使用。