Monter un partage de fichiers Azure dans Azure Container InstancesMount an Azure file share in Azure Container Instances

Par défaut, les conteneurs Azure Container Instances sont sans état.By default, Azure Container Instances are stateless. Si le conteneur se bloque ou s’arrête, son état est entièrement perdu.If the container crashes or stops, all of its state is lost. Pour conserver l’état au-delà de la durée de vie du conteneur, vous devez monter un volume à partir d’un stockage externe.To persist state beyond the lifetime of the container, you must mount a volume from an external store. Cet article explique comment monter un partage de fichiers Azure créé avec Azure Files pour une utilisation avec Azure Container Instances.This article shows how to mount an Azure file share created with Azure Files for use with Azure Container Instances. Azure Files offre des partages de fichiers managés dans le cloud qui sont accessibles via le protocole SMB (Server Message Block) standard.Azure Files offers fully managed file shares in the cloud that are accessible via the industry standard Server Message Block (SMB) protocol. L'utilisation d'un partage de fichiers Azure avec Azure Container Instances offre des fonctionnalités de partage de fichiers similaires à l’utilisation d’un partage de fichiers Azure avec machines virtuelles Azure.Using an Azure file share with Azure Container Instances provides file-sharing features similar to using an Azure file share with Azure virtual machines.

Notes

Le montage d’un partage de fichiers Azure est actuellement limité aux conteneurs Linux.Mounting an Azure Files share is currently restricted to Linux containers. Nous travaillons actuellement à proposer toutes ces fonctionnalités dans des conteneurs Windows. En attendant, nous vous invitons à découvrir les différences actuelles de la plateforme dans la Vue d’ensemble.While we are working to bring all features to Windows containers, you can find current platform differences in the overview.

Crée un partage de fichiers AzureCreate an Azure file share

Avant d’utiliser un partage de fichiers Azure avec Azure Container Instances, vous devez le créer.Before using an Azure file share with Azure Container Instances, you must create it. Exécutez le script suivant pour créer un compte de stockage et y héberger le partage de fichiers, et le partage proprement dit.Run the following script to create a storage account to host the file share, and the share itself. Comme le nom du compte de stockage doit être globalement unique, le script ajoute une valeur aléatoire à la chaîne de base.The storage account name must be globally unique, so the script adds a random value to the base string.

# 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

Obtenir des informations d’identification de stockageGet storage credentials

Pour monter un partage de fichiers Azure en tant que volume dans Azure Container Instances, vous avez besoin de trois valeurs : le nom du compte de stockage, le nom du partage et la clé d’accès de stockage.To mount an Azure file share as a volume in Azure Container Instances, you need three values: the storage account name, the share name, and the storage access key.

Si vous avez utilisé le script ci-dessus, le nom du compte de stockage a été stocké dans la variable $ACI_PERS_STORAGE_ACCOUNT_NAME.If you used the script above, the storage account name was stored in the $ACI_PERS_STORAGE_ACCOUNT_NAME variable. Pour afficher le nom du compte, entrez :To see the account name, type:

echo $ACI_PERS_STORAGE_ACCOUNT_NAME

Le nom du partage étant déjà connu (c’est-à-dire acishare dans le script ci-dessus), il ne reste que la clé du compte de stockage, qui peut être trouvée à l’aide de la commande suivante :The share name is already known (defined as acishare in the script above), so all that remains is the storage account key, which can be found using the following command:

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

Déployer le conteneur et monter le volume - CLIDeploy container and mount volume - CLI

Pour monter un partage de fichiers Azure en tant que volume dans un conteneur en utilisant Azure CLI, spécifiez le point de montage du volume et le partage lorsque vous créez le conteneur avec az container create.To mount an Azure file share as a volume in a container by using the Azure CLI, specify the share and volume mount point when you create the container with az container create. Si vous avez accompli les étapes précédentes, vous pouvez monter le partage que vous avez créé avant à l’aide de la commande suivante pour créer un conteneur :If you've followed the previous steps, you can mount the share you created earlier by using the following command to create a 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/

La valeur --dns-name-label doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur.The --dns-name-label value must be unique within the Azure region where you create the container instance. Mettez à jour la valeur de la commande précédente si vous recevez un message d’erreur Étiquette de nom DNS lorsque vous exécutez la commande.Update the value in the preceding command if you receive a DNS name label error message when you execute the command.

Gérer les fichiers dans le volume montéManage files in mounted volume

Après le démarrage du conteneur, vous pouvez utiliser l’application web simple déployée par l’image Microsoft aci-hellofiles pour créer de petits fichiers texte dans le partage de fichiers Azure sur le chemin de montage que vous avez indiqué.Once the container starts up, you can use the simple web app deployed via the Microsoft aci-hellofiles image to create small text files in the Azure file share at the mount path you specified. Obtenir le nom de domaine complet de l’application web (FQDN) avec la commande az container show :Obtain the web app's fully qualified domain name (FQDN) with the az container show command:

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

Après avoir enregistré le texte à l’aide de l’application, vous pouvez utiliser le portail Azure ou un outil tel quel’Explorateur Stockage Microsoft Azure pour récupérer et inspecter le fichier écrit sur le partage de fichiers.After saving text using the app, you can use the Azure portal or a tool like the Microsoft Azure Storage Explorer to retrieve and inspect the file written to the file share.

Déployer le conteneur et monter le volume - YAMLDeploy container and mount volume - YAML

Vous pouvez également déployer un groupe de conteneurs et monter un volume dans un conteneur avec l’interface Azure CLI et un modèle YAML.You can also deploy a container group and mount a volume in a container with the Azure CLI and a YAML template. Le déploiement avec un modèle YAML est la méthode privilégiée lorsqu’il s’agit de déployer des groupes de conteneurs, composés de conteneurs multiples.Deploying by YAML template is the preferred method when deploying container groups consisting of multiple containers.

Le modèle YAML suivant définit un groupe de conteneurs avec un seul conteneur créé avec l’image aci-hellofiles.The following YAML template defines a container group with one container created with the aci-hellofiles image. Le conteneur monte le partage de fichiers Azure acishare créé précédemment en tant que volume.The container mounts the Azure file share acishare created previously as a volume. Lorsque cela est indiqué, entrez la clé de stockage et le nom du compte de stockage qui héberge le partage de fichiers.Where indicated, enter the name and storage key for the storage account that hosts the file share.

Comme dans l’exemple CLI, la valeur dnsNameLabel doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur.As in the CLI example, the dnsNameLabel value must be unique within the Azure region where you create the container instance. Si nécessaire, mettez à jour la valeur dans le fichier YAML.Update the value in the YAML file if needed.

apiVersion: '2018-10-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

Pour déployer grâce au modèle YAML, enregistrez le YAML précédent dans un fichier nommé deploy-aci.yaml, puis exécutez la commande az container create avec le paramètre --file :To deploy with the YAML template, save the preceding YAML to a file named deploy-aci.yaml, then execute the az container create command with the --file parameter:

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

Déployer le conteneur et monter le volume - Resource ManagerDeploy container and mount volume - Resource Manager

En plus du déploiement de l’interface CLI et de YAML, vous pouvez déployer un groupe de conteneurs et monter un volume dans un conteneur à l’aide d’un modèle Resource Manager Azure.In addition to CLI and YAML deployment, you can deploy a container group and mount a volume in a container using an Azure Resource Manager template.

Tout d’abord, remplissez le tableau volumes dans la section properties du groupe de conteneurs du modèle.First, populate the volumes array in the container group properties section of the template.

Ensuite, pour chaque conteneur dans lequel vous souhaitez monter le volume, renseignez le tableau volumeMounts dans la section properties de la définition de conteneur.Then, for each container in which you'd like to mount the volume, populate the volumeMounts array in the properties section of the container definition.

Le modèle Resource Manager suivant définit un groupe de conteneurs avec un conteneur montant un volume aci-hellofilessecret sur .The following Resource Manager template defines a container group with one container created with the aci-hellofiles image. Le conteneur monte le partage de fichiers Azure acishare créé précédemment en tant que volume.The container mounts the Azure file share acishare created previously as a volume. Lorsque cela est indiqué, entrez la clé de stockage et le nom du compte de stockage qui héberge le partage de fichiers.Where indicated, enter the name and storage key for the storage account that hosts the file share.

Comme dans les exemples précédents, la valeur dnsNameLabel doit être unique au sein de la région Azure dans laquelle vous créez l’instance de conteneur.As in the previous examples, the dnsNameLabel value must be unique within the Azure region where you create the container instance. Si nécessaire, mettez à jour la valeur dans le modèle.Update the value in the template if needed.

{
  "$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": "2018-10-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>"
            }
          }
        ]
      }
    }
  ]
}

Pour déployer grâce au modèle Resource Manager, enregistrez le JSON précédent dans un fichier nommé deploy-aci.json, puis exécutez la commande az container create avec le paramètre --template-file :To deploy with the Resource Manager template, save the preceding JSON to a file named deploy-aci.json, then execute the az group deployment create command with the --template-file parameter:

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

Monter plusieurs volumesMount multiple volumes

Pour monter plusieurs volumes dans une instance de conteneur, vous devez effectuer le déploiement à l’aide d’un modèle Azure Resource Manager ou d'un fichier YAML.To mount multiple volumes in a container instance, you must deploy using an Azure Resource Manager template or a YAML file. Pour utiliser un modèle ou fichier YAML, fournissez les détails de partage et définissez les volumes en remplissant le tableau volumes dans la section properties du modèle.To use a template or YAML file, provide the share details and define the volumes by populating the volumes array in the properties section of the template.

Par exemple, si vous avez créé deux partages de fichiers Azure nommés share1 et share2 dans le compte de stockage myStorageAccount, le tableau volumes dans un modèle Resource Manager ressemblerait à ceci :For example, if you created two Azure Files shares named share1 and share2 in storage account myStorageAccount, the volumes array in a Resource Manager template would appear similar to the following:

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

Ensuite, pour chaque conteneur du groupe de conteneurs dans lequel vous souhaitez monter les volumes, remplissez le tableau volumeMounts dans la section properties de la définition de conteneur.Next, for each container in the container group in which you'd like to mount the volumes, populate the volumeMounts array in the properties section of the container definition. Ainsi, nous obtenons les deux volumes montés, myvolume1 et myvolume2, définis précédemment :For example, this mounts the two volumes, myvolume1 and myvolume2, previously defined:

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

Étapes suivantesNext steps

Découvrez comment monter d’autres types de volumes dans Azure Container Instances :Learn how to mount other volume types in Azure Container Instances: