Montera en Azure-filresurs i Azure Container Instances

Som standard är Azure Container Instances tillståndslösa. Om containern startas om, kraschar eller stoppas går allt dess tillstånd förlorat. Om du vill bevara tillståndet längre än containerns livslängd måste du montera en volym från en extern lagring. Som du ser i den här artikeln kan Azure Container Instances montera en Azure-filresurs som skapats med Azure Files. Azure Files erbjuder fullständigt hanterade filresurser i Azure Storage som är tillgängliga via branschstandardprotokollet Server Message Block (SMB). Om du använder en Azure-filresurs med Azure Container Instances får du fildelningsfunktioner som liknar hur du använder en Azure-filresurs med virtuella Azure-datorer.

Begränsningar

  • Du kan bara montera Azure Files resurser till Linux-containrar. Läs mer om skillnaderna i funktionsstöd för Linux- och Windows-containergrupper i översikten.
  • Azure-filresursens volymmontering kräver att Linux-containern körs som rot .
  • Volymmonteringar för Azure-filresurser är begränsade till CIFS-stöd.

Anteckning

Montering av en Azure Files resurs till en containerinstans liknar en Docker-bindningsmontering. Om du monterar en resurs i en containerkatalog där filer eller kataloger finns döljer monteringen filer eller kataloger, vilket gör dem otillgängliga medan containern körs.

Viktigt

Om du distribuerar containergrupper till en Azure-Virtual Network måste du lägga till en tjänstslutpunkt i ditt Azure Storage-konto.

Skapa en Azure-filresurs

Innan du kan använda en Azure-filresurs med Azure Container Instances måste du skapa den. Kör följande skript för att skapa ett lagringskonto som ska vara värd för filresursen och själva resursen. Namnet på lagringskontot måste vara globalt unikt, så skriptet lägger till ett slumpmässigt värde i bassträngen.

# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare

# Create the storage account with the parameters
az storage account create \
    --resource-group $ACI_PERS_RESOURCE_GROUP \
    --name $ACI_PERS_STORAGE_ACCOUNT_NAME \
    --location $ACI_PERS_LOCATION \
    --sku Standard_LRS

# Create the file share
az storage share create \
  --name $ACI_PERS_SHARE_NAME \
  --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME

Hämta autentiseringsuppgifter för lagringen

När du ska montera en Azure-filresurs som en volym i Azure Container Instances behöver du tre värden: namnet på lagringskontot, resursnamnet och åtkomstnyckeln för lagringen.

  • Lagringskontonamn – Om du använde föregående skript lagrades lagringskontonamnet i variabeln $ACI_PERS_STORAGE_ACCOUNT_NAME . Om du vill se kontonamnet skriver du:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Resursnamn – Det här värdet är redan känt (definieras som acishare i föregående skript)

  • Lagringskontonyckel – Det här värdet kan hittas med följande kommando:

    STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv)
    echo $STORAGE_KEY
    

Distribuera container och montera volym – CLI

Om du vill montera en Azure-filresurs som en volym i en container med hjälp av Azure CLI anger du resurs- och volymmonteringspunkten när du skapar containern med az container create. Om du har följt föregående steg kan du montera resursen som du skapade tidigare med hjälp av följande kommando för att skapa en container:

az container create \
    --resource-group $ACI_PERS_RESOURCE_GROUP \
    --name hellofiles \
    --image mcr.microsoft.com/azuredocs/aci-hellofiles \
    --dns-name-label aci-demo \
    --ports 80 \
    --azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
    --azure-file-volume-account-key $STORAGE_KEY \
    --azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
    --azure-file-volume-mount-path /aci/logs/

Värdet --dns-name-label måste vara unikt i den Azure-region där du skapar containerinstansen. Uppdatera värdet i föregående kommando om du får felmeddelandet DNS-namnetikett när du kör kommandot .

Hantera filer i monterad volym

När containern startas kan du använda den enkla webbappen som distribueras via Microsoft aci-hellofiles-avbildningen för att skapa små textfiler i Azure-filresursen på den monteringssökväg som du angav. Hämta webbappens fullständigt kvalificerade domännamn (FQDN) med kommandot az container show :

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
  --name hellofiles --query ipAddress.fqdn --output tsv

När du har sparat text med hjälp av appen kan du använda Azure Portal eller ett verktyg som Microsoft Azure Storage Explorer för att hämta och inspektera filen eller filerna som skrivits till filresursen.

Distribuera container och montera volym – YAML

Du kan också distribuera en containergrupp och montera en volym i en container med Azure CLI och en YAML-mall. Att distribuera med YAML-mall är en föredragen metod när du distribuerar containergrupper som består av flera containrar.

Följande YAML-mall definierar en containergrupp med en container som skapats med avbildningen aci-hellofiles . Containern monterar Azure-filresursen acishare som skapades tidigare som en volym. Ange namn och lagringsnyckel för det lagringskonto som är värd för filresursen.

Som i CLI-exemplet dnsNameLabel måste värdet vara unikt i den Azure-region där du skapar containerinstansen. Uppdatera värdet i YAML-filen om det behövs.

apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
  containers:
  - name: hellofiles
    properties:
      environmentVariables: []
      image: mcr.microsoft.com/azuredocs/aci-hellofiles
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      volumeMounts:
      - mountPath: /aci/logs/
        name: filesharevolume
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
      - port: 80
    dnsNameLabel: aci-demo
  volumes:
  - name: filesharevolume
    azureFile:
      sharename: acishare
      storageAccountName: <Storage account name>
      storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups

Om du vill distribuera med YAML-mallen sparar du föregående YAML i en fil med namnet deploy-aci.yamloch kör sedan kommandot az container create med parametern --file :

# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml

Distribuera container och montera volym – Resource Manager

Förutom CLI- och YAML-distribution kan du distribuera en containergrupp och montera en volym i en container med hjälp av en Azure Resource Manager-mall.

Fyll först i matrisen volumes i avsnittet containergrupp properties i mallen.

Fyll sedan i matrisen volumeMountsproperties i avsnittet i containerdefinitionen för varje container där du vill montera volymen.

Följande Resource Manager-mall definierar en containergrupp med en container som skapats med avbildningenaci-hellofiles. Containern monterar Azure-filresursen acishare som skapades tidigare som en volym. Ange namn och lagringsnyckel för det lagringskonto som är värd för filresursen.

Precis som i föregående exempel dnsNameLabel måste värdet vara unikt i den Azure-region där du skapar containerinstansen. Uppdatera värdet i mallen om det behövs.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "container1name": "hellofiles",
    "container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
  },
  "resources": [
    {
      "name": "file-share-demo",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2019-12-01",
      "location": "[resourceGroup().location]",
      "properties": {
        "containers": [
          {
            "name": "[variables('container1name')]",
            "properties": {
              "image": "[variables('container1image')]",
              "resources": {
                "requests": {
                  "cpu": 1,
                  "memoryInGb": 1.5
                }
              },
              "ports": [
                {
                  "port": 80
                }
              ],
              "volumeMounts": [
                {
                  "name": "filesharevolume",
                  "mountPath": "/aci/logs"
                }
              ]
            }
          }
        ],
        "osType": "Linux",
        "ipAddress": {
          "type": "Public",
          "ports": [
            {
              "protocol": "tcp",
              "port": "80"
            }
          ],
          "dnsNameLabel": "aci-demo"
        },
        "volumes": [
          {
            "name": "filesharevolume",
            "azureFile": {
                "shareName": "acishare",
                "storageAccountName": "<Storage account name>",
                "storageAccountKey": "<Storage account key>"
            }
          }
        ]
      }
    }
  ]
}

Om du vill distribuera med mallen Resource Manager sparar du föregående JSON i en fil med namnet deploy-aci.jsonoch kör sedan kommandot az deployment group create med parametern --template-file :

# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

Montera flera volymer

Om du vill montera flera volymer i en containerinstans måste du distribuera med hjälp av en Azure Resource Manager-mall, en YAML-fil eller en annan programmatisk metod. Om du vill använda en mall eller YAML-fil anger du resursinformationen och definierar volymerna genom att fylla i matrisen volumesproperties i avsnittet i filen.

Om du till exempel har skapat två Azure Files resurser med namnet share1 och share2 i lagringskontot myStorageAccount, skulle matrisen volumes i en Resource Manager-mall se ut ungefär så här:

"volumes": [{
  "name": "myvolume1",
  "azureFile": {
    "shareName": "share1",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
},
{
  "name": "myvolume2",
  "azureFile": {
    "shareName": "share2",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
}]

För varje container i containergruppen där du vill montera volymerna fyller du sedan i matrisen volumeMountsproperties i avsnittet i containerdefinitionen. Detta monterar till exempel de två volymerna myvolume1 och myvolume2, som tidigare definierats:

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]

Nästa steg

Lär dig hur du monterar andra volymtyper i Azure Container Instances: