Volúmenes de Docker - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Volúmenes de Docker

Cuando se utilizan volúmenes de Docker, se puede usar el controlador local integrado o un controlador de volumen de terceros. Los volúmenes de Docker los administra Docker, y se crea un directorio en /var/lib/docker/volumes en la instancia de contenedor que contiene los datos del volumen.

Para utilizar volúmenes de Docker, especifique dockerVolumeConfiguration en su definición de tarea. Para obtener más información, consulte Uso de volúmenes.

Algunos casos de uso comunes de volúmenes de Docker son los siguientes:

  • Proporcionar volúmenes de datos persistentes para su uso con contenedores

  • Compartir un volumen de datos definido en distintas ubicaciones de distintos contenedores en la misma instancia de contenedor

  • Definir un volumen de datos no persistentes vacío y montarlo en varios contenedores dentro de la misma tarea

  • Proporcionar un volumen de datos a la tarea que está administrado por un controlador de terceros

Consideraciones acerca de volúmenes de Docker

Al utilizar volúmenes de Amazon Docker, tenga en cuenta lo siguiente:

  • Los volúmenes de Docker solo se admiten cuando se utiliza el tipo de lanzamiento de EC2 o instancias externas.

  • Los contenedores de Windows solo admiten el uso del controlador local.

  • Si se utiliza un controlador de terceros, asegúrese de que está instalado y activo en la instancia de contenedor antes de iniciar el agente de contenedor. Si el controlador de terceros no está activo antes de iniciar el agente, puede reiniciar el agente de contenedor con uno de los siguientes comandos:

    • Para la AMI de Amazon Linux 2 optimizada para Amazon ECS:

      sudo systemctl restart ecs
    • Para la AMI de Amazon Linux optimizada para Amazon ECS:

      sudo stop ecs && sudo start ecs

Especificación de un volumen de Docker en la definición de tarea

Para que los contenedores puedan utilizar volúmenes de datos, debe especificar las configuraciones del volumen y el punto de montaje en su definición de tarea. En esta sección se describe la configuración de volumen para un contenedor. Para las tareas que usan un volumen de Docker, especifique dockerVolumeConfiguration. Para las tareas que usan un volumen de host de montaje vinculado, especifique host y, si lo desea, sourcePath.

El siguiente JSON de definición de tareas muestra la sintaxis de los objetos volumes y mountPoints para un contenedor.

{ "containerDefinitions": [ { "mountPoints": [ { "sourceVolume": "string", "containerPath": "/path/to/mount_volume", "readOnly": boolean } ] } ], "volumes": [ { "name": "string", "dockerVolumeConfiguration": { "scope": "string", "autoprovision": boolean, "driver": "string", "driverOpts": { "key": "value" }, "labels": { "key": "value" } } } ] }
name

Tipo: String

Requerido: No

El nombre del volumen. Se admiten hasta 255 letras (mayúsculas y minúsculas), números, guiones y caracteres de subrayado. Se hace referencia a este nombre en el parámetro sourceVolume de la definición de contenedor mountPoints.

dockerVolumeConfiguration

Tipo: objeto

Obligatorio: no

Este parámetro se especifica cuando se usan volúmenes de Docker. Los volúmenes de Docker solo se admiten cuando se utiliza el tipo de lanzamiento de EC2. Los contenedores de Windows solo admiten el uso del controlador local. Para utilizar montajes vinculados, especifique host en su lugar.

scope

Tipo: String

Valores válidos: task | shared

Obligatorio: no

El ámbito del volumen de Docker, que determina su ciclo de vida. Los volúmenes de Docker con un ámbito de task se aprovisionan automáticamente cuando se inicia la tarea y se destruyen cuando la tarea se detiene. Los volúmenes de Docker cuyo ámbito es shared se conservan una vez detenida la tarea.

autoprovision

Tipo: booleano

Valor predeterminado: false

Obligatorio: no

Si este valor es true, el volumen de Docker se crea si aún no existe. Este campo solo se usa si scope es shared. Si el valor de scope es task, este parámetro se debe omitir o establecer en false.

driver

Tipo: String

Requerido: No

El controlador del volumen de Docker que se va a usar. El valor de controlador debe coincidir con el nombre del controlador proporcionado por Docker, ya que se usa para la ubicación de tareas. Si el controlador se instaló mediante la CLI del complemento Docker, use docker plugin ls para recuperar el nombre de controlador de la instancia de contenedor. Si el controlador se instaló con otro método, use la detección de complementos de Docker para recuperar el nombre del controlador. Para obtener más información, consulte la documentación sobre la detección de complementos de Docker. Este parámetro se asigna a Driver en la sección Create a volume (Crear un volumen) de la Docker Remote API (API remota de Docker) y con la opción de --driver para docker volume create.

driverOpts

Tipo: String

Requerido: No

Una correspondencia de las opciones específicas del controlador Docker que se pasan. Este parámetro se asigna a DriverOpts en la sección Create a volume (Crear un volumen) de la Docker Remote API (API remota de Docker) y con la opción de --opt para docker volume create.

labels

Tipo: String

Requerido: No

Metadatos personalizados que se añaden al volumen de Docker. Este parámetro se asigna a Labels en la sección Create a volume (Crear un volumen) de la Docker Remote API (API remota de Docker) y con la opción de --label para docker volume create.

mountPoints

Tipo: matriz de objetos

Obligatorio: no

Los puntos de montaje para los volúmenes de datos del contenedor.

Este parámetro se asigna a Volumes en la sección Crear un contenedor de la API remota de Docker y con la opción --volume de docker run.

Los contenedores de Windows pueden montar directorios completos en la misma unidad que $env:ProgramData. Los contenedores de Windows no pueden montar directorios en una unidad diferente y el punto de montaje no puede ser entre unidades.

sourceVolume

Tipo: String

Obligatorio: sí, si se utilizan mountPoints.

El nombre del volumen a montar.

containerPath

Tipo: String

Obligatorio: sí, si se utilizan mountPoints.

La ruta en el contenedor en la que montar el volumen de

readOnly

Tipo: booleano

Obligatorio: no

Si este valor es true, el acceso del contenedor al volumen es de solo lectura. Si este valor es false, el contenedor puede escribir en el volumen. El valor predeterminado es false.

Ejemplos

A continuación, se muestran ejemplos del uso de volúmenes de Docker.

Para proporcionar almacenamiento no persistente para un contenedor con un volumen de Docker

En este ejemplo, un contenedor utiliza un volumen de datos vacío que se elimina después de finalizar la tarea. Como caso de uso de ejemplo, podría tener un contenedor que necesita obtener acceso a una ubicación de almacenamiento de archivos scratch durante una tarea. Esta tarea se puede lograr utilizando un volumen de Docker.

  1. En sección de definición de tarea de volumes, defina un volumen de datos con los valores name y DockerVolumeConfiguration. En este ejemplo, especifique el ámbito como task para que el volumen se elimine una vez que se detenga la tarea y utilice el controlador local integrado.

    "volumes": [ { "name": "scratch", "dockerVolumeConfiguration" : { "scope": "task", "driver": "local", "labels": { "scratch": "space" } } } ]
  2. En la sección containerDefinitions, defina un contenedor con valores mountPoints que hagan referencia al nombre del volumen definido y el valor containerPath en el que desea montar el volumen en el contenedor.

    "containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "scratch", "containerPath": "/var/scratch" } ] } ]
Para proporcionar almacenamiento persistente para un contenedor con un volumen de Docker

En este ejemplo, desea usar un volumen compartido para varios contenedores y desea que se conserve una vez que se detenga cualquiera de las tareas que lo usa. El controlador local integrado se está utilizando. Esto es para que el volumen siga vinculado al ciclo de vida de la instancia de contenedor.

  1. En sección de definición de tarea de volumes, defina un volumen de datos con los valores name y DockerVolumeConfiguration. En este ejemplo, especifique un alcance shared para que el volumen persista, establezca el aprovisionamiento automático en true. Esto es para que el volumen se cree para su uso. A continuación, utilice también el controlador local integrado.

    "volumes": [ { "name": "database", "dockerVolumeConfiguration" : { "scope": "shared", "autoprovision": true, "driver": "local", "labels": { "database": "database_name" } } } ]
  2. En la sección containerDefinitions, defina un contenedor con valores mountPoints que hagan referencia al nombre del volumen definido y el valor containerPath en el que desea montar el volumen en el contenedor.

    "containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "database", "containerPath": "/var/database" } ] }, { "name": "container-2", "mountPoints": [ { "sourceVolume": "database", "containerPath": "/var/database" } ] } ]
Para proporcionar almacenamiento persistente de NFS para un contenedor con un volumen de Docker

En este ejemplo, un contenedor utiliza un volumen de datos de NFS que se monta automáticamente cuando inicia la tarea y se desmonta cuando la tarea finaliza. Utiliza el controlador integrado local de Docker. Un caso de uso de ejemplo es que puede tener un almacenamiento de NFS local y necesita acceder a él desde una tarea de ECS Anywhere. Esto se puede lograr con un volumen de Docker con la opción de controlador de NFS.

  1. En sección de definición de tarea de volumes, defina un volumen de datos con los valores name y DockerVolumeConfiguration. En este ejemplo, especifique un alcance task para que el volumen se desmonte cuando finaliza la tarea. Utilice el controlador local y configure driverOpts con las opciones type, device y o en consecuencia. Sustituya NFS_SERVER por el punto de conexión del servidor de NFS.

    "volumes": [ { "name": "NFS", "dockerVolumeConfiguration" : { "scope": "task", "driver": "local", "driverOpts": { "type": "nfs", "device": "$NFS_SERVER:/mnt/nfs", "o": "addr=$NFS_SERVER" } } } ]
  2. En la sección containerDefinitions, defina un contenedor con valores mountPoints que hagan referencia al nombre del volumen definido y el valor containerPath en el que desea montar el volumen en el contenedor.

    "containerDefinitions": [ { "name": "container-1", "mountPoints": [ { "sourceVolume": "NFS", "containerPath": "/var/nfsmount" } ] } ]