Montaje de un recurso compartido de archivos de Azure en Azure Container InstancesMount an Azure file share in Azure Container Instances

De forma predeterminada, Azure Container Instances no tiene estado.By default, Azure Container Instances are stateless. Si el contenedor se bloquea o se detiene, se pierde todo su estado.If the container crashes or stops, all of its state is lost. Para conservar el estado más allá de la duración del contenedor, debe montar un volumen desde un almacén externo.To persist state beyond the lifetime of the container, you must mount a volume from an external store. Como se muestra en este artículo, Azure Container Instances puede montar un recurso compartido de archivos de Azure creado con Azure Files.As shown in this article, Azure Container Instances can mount an Azure file share created with Azure Files. Azure Files ofrece recursos compartidos de archivos totalmente administrados en Azure Storage, a los que se puede acceder mediante el protocolo de bloque de mensajes del servidor (SMB) estándar.Azure Files offers fully managed file shares hosted in Azure Storage that are accessible via the industry standard Server Message Block (SMB) protocol. El uso de un recurso compartido de archivos de Azure con Azure Container Instances ofrece características de uso compartido de archivos similares al uso de un recurso compartido de archivo de Azure con Azure Virtual Machines.Using an Azure file share with Azure Container Instances provides file-sharing features similar to using an Azure file share with Azure virtual machines.

Nota

El montaje de un recurso compartido de Azure Files está actualmente restringido a los contenedores Linux.Mounting an Azure Files share is currently restricted to Linux containers. Busque las diferencias de plataforma actuales en la Introducción.Find current platform differences in the overview.

Montar un recurso compartido de Azure Files en una instancia de contenedor es similar a un montaje de enlace de Docker.Mounting an Azure Files share to a container instance is similar to a Docker bind mount. Tenga en cuenta que si monta un recurso compartido en un directorio de contenedor en el que existen archivos o directorios, estos archivos o directorios quedan ocultos por el montaje y no son accesibles mientras se ejecuta el contenedor.Be aware that if you mount a share into a container directory in which files or directories exist, these files or directories are obscured by the mount and are not accessible while the container runs.

Creación de un recurso compartido de archivos de AzureCreate an Azure file share

Antes de utilizar un recurso compartido de archivos de Azure en Azure Container Instances, debe crearlo.Before using an Azure file share with Azure Container Instances, you must create it. Ejecute el script siguiente para crear una cuenta de almacenamiento para hospedar el recurso compartido de archivos y el propio recurso compartido.Run the following script to create a storage account to host the file share, and the share itself. El nombre de la cuenta de almacenamiento debe ser único globalmente, por lo que el script agrega un valor aleatorio en la cadena 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

Obtención de las credenciales de almacenamientoGet storage credentials

Para montar un recurso compartido de archivos de Azure como un volumen en Azure Container Instances, necesita tres valores: el nombre de la cuenta de almacenamiento, el nombre del recurso compartido y la clave de acceso de almacenamiento.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.

  • Nombre de la cuenta de almacenamiento: si ha usado el script anterior, el nombre de la cuenta de almacenamiento se almacena en la variable $ACI_PERS_STORAGE_ACCOUNT_NAME.Storage account name - If you used the preceding script, the storage account name was stored in the $ACI_PERS_STORAGE_ACCOUNT_NAME variable. Para ver el nombre de la cuenta, escriba:To see the account name, type:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nombre del recurso compartido: este valor ya se conoce (se define como acishare en el script anterior)Share name - This value is already known (defined as acishare in the preceding script)

  • Clave de cuenta de almacenamiento: este valor puede encontrarse con el siguiente comando:Storage account key - This value 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
    

Implementar contenedor y montar volumen: CLIDeploy container and mount volume - CLI

Para montar un recurso compartido de archivos de Azure como volumen en un contenedor mediante la CLI de Azure, especifique el recurso compartido y el punto de montaje del volumen al crear el contenedor con 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 ha seguido los pasos anteriores, puede montar el recurso compartido que creó anteriormente mediante el siguiente comando para crear un contenedor:If you 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/

El valor --dns-name-label debe ser único dentro de la región de Azure en la que se crea la instancia de contenedor.The --dns-name-label value must be unique within the Azure region where you create the container instance. Actualice el valor del comando anterior si recibe un mensaje de error de etiqueta de nombre DNS al ejecutar el comando.Update the value in the preceding command if you receive a DNS name label error message when you execute the command.

Administración de archivos en el volumen montadoManage files in mounted volume

Una vez que se inicie el contenedor, puede usar la aplicación web sencilla que se implementó mediante la imagen aci-hellofiles de Microsoft para crear archivos de texto pequeños en el recurso compartido de archivos de Azure de la ruta de montaje que especificó.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. Obtenga el nombre de dominio completo (FQDN) de la aplicación web con el comando 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

Tras guardar el texto con la aplicación, puede usar Azure Portal o una herramienta como el Explorador de Microsoft Azure Storage para recuperar e inspeccionar el archivo o archivos escritos en el recurso compartido de archivos.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 or files written to the file share.

Implementar contenedor y montar volumen: YAMLDeploy container and mount volume - YAML

También puede implementar un grupo de contenedores y montar un volumen en un contenedor con la CLI de Azure y una plantilla de YAML.You can also deploy a container group and mount a volume in a container with the Azure CLI and a YAML template. La implementación mediante la plantilla YAML es el método preferido al implementar grupos de contenedores que constan de varios contenedores.Deploying by YAML template is a preferred method when deploying container groups consisting of multiple containers.

La siguiente plantilla de YAML define un grupo de contenedores con un contenedor creado con la imagen aci-hellofiles.The following YAML template defines a container group with one container created with the aci-hellofiles image. El contenedor monta el recurso compartido de archivos de Azure acishare creado anteriormente como un volumen.The container mounts the Azure file share acishare created previously as a volume. Donde se indique, escriba la clave de almacenamiento y el nombre de la cuenta de almacenamiento que hospeda el recurso compartido de archivos.Where indicated, enter the name and storage key for the storage account that hosts the file share.

Al igual que en el ejemplo de la CLI, el valor dnsNameLabel debe ser único dentro de la región de Azure en la que se crea la instancia de contenedor.As in the CLI example, the dnsNameLabel value must be unique within the Azure region where you create the container instance. Si es necesario, actualice el valor en el archivo YAML.Update the value in the YAML file if needed.

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

Para implementar con la plantilla YAML, guarde el anterior código de YAML en un archivo denominado deploy-aci.yaml y luego ejecute el comando az container create con el parámetro --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

Implementar contenedor y montar volumen: Resource ManagerDeploy container and mount volume - Resource Manager

Además de la implementación mediante la CLI y YAML, puede implementar un grupo de contenedores y montar un volumen en un contenedor con una plantilla de Azure Resource Manager.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.

En primer lugar, rellene la matriz volumes en la sección properties del grupo de contenedores de la plantilla.First, populate the volumes array in the container group properties section of the template.

Luego, en todos los contenedores en los que quiera montar el volumen, rellene la matriz volumeMounts de la sección properties de la definición del contenedor.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.

La siguiente plantilla de Resource Manager define un grupo de contenedores con un contenedor creado con la imagen aci-hellofiles.The following Resource Manager template defines a container group with one container created with the aci-hellofiles image. El contenedor monta el recurso compartido de archivos de Azure acishare creado anteriormente como un volumen.The container mounts the Azure file share acishare created previously as a volume. Donde se indique, escriba la clave de almacenamiento y el nombre de la cuenta de almacenamiento que hospeda el recurso compartido de archivos.Where indicated, enter the name and storage key for the storage account that hosts the file share.

Al igual que en los ejemplos anteriores, el valor dnsNameLabel debe ser único dentro de la región de Azure en la que se crea la instancia de contenedor.As in the previous examples, the dnsNameLabel value must be unique within the Azure region where you create the container instance. Si es necesario, actualice el valor en la plantilla.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": "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>"
            }
          }
        ]
      }
    }
  ]
}

Para implementar con la plantilla de Resource Manager, guarde el anterior código JSON en un archivo denominado deploy-aci.json y luego ejecute el comando az deployment group create con el parámetro --template-file:To deploy with the Resource Manager template, save the preceding JSON to a file named deploy-aci.json, then execute the az deployment group create command with the --template-file parameter:

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

Montaje de varios volúmenesMount multiple volumes

Para montar varios volúmenes en una instancia de contenedor, debe realizar la implementación con una plantilla de Azure Resource Manager u otro método de programación.To mount multiple volumes in a container instance, you must deploy using an Azure Resource Manager template, a YAML file, or another programmatic method. Para usar una plantilla o un archivo YAML, proporcione los detalles del recurso compartido y defina los volúmenes al rellenar la matriz volumes de la sección properties del archivo.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 file.

Por ejemplo, si ha creado dos recursos compartidos de Azure Files denominados share1 y share2 en la cuenta de almacenamiento myStorageAccount, la matriz volumes de la plantilla de Resource Manager sería similar a la siguiente: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>"
  }
}]

A continuación, para cada contenedor del grupo de contenedores en el que desea montar los volúmenes, rellene la matriz volumeMounts en la sección properties de la definición del contenedor.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. Por ejemplo, esto monta los dos volúmenes, myvolume1 y myvolume2 definidos previamente:For example, this mounts the two volumes, myvolume1 and myvolume2, previously defined:

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

Pasos siguientesNext steps

Aprenda a montar otros tipos de volúmenes en Azure Container Instances:Learn how to mount other volume types in Azure Container Instances: