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 contenedormountPoints
. 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, especifiquehost
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 esshared
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 siscope
esshared
. Si el valor descope
estask
, este parámetro se debe omitir o establecer enfalse
. 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
paradocker 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
paradocker 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
paradocker 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 contenedorde 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 esfalse
, el contenedor puede escribir en el volumen. El valor predeterminado esfalse
.
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.
-
En sección de definición de tarea de
volumes
, defina un volumen de datos con los valoresname
yDockerVolumeConfiguration
. En este ejemplo, especifique el ámbito comotask
para que el volumen se elimine una vez que se detenga la tarea y utilice el controladorlocal
integrado."volumes": [ { "name": "
scratch
", "dockerVolumeConfiguration" : { "scope": "task
", "driver": "local
", "labels": { "scratch
": "space
" } } } ] -
En la sección
containerDefinitions
, defina un contenedor con valoresmountPoints
que hagan referencia al nombre del volumen definido y el valorcontainerPath
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.
-
En sección de definición de tarea de
volumes
, defina un volumen de datos con los valoresname
yDockerVolumeConfiguration
. En este ejemplo, especifique un alcanceshared
para que el volumen persista, establezca el aprovisionamiento automático entrue
. Esto es para que el volumen se cree para su uso. A continuación, utilice también el controladorlocal
integrado."volumes": [ { "name": "
database
", "dockerVolumeConfiguration" : { "scope": "shared
", "autoprovision": true, "driver": "local
", "labels": { "database
": "database_name
" } } } ] -
En la sección
containerDefinitions
, defina un contenedor con valoresmountPoints
que hagan referencia al nombre del volumen definido y el valorcontainerPath
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.
-
En sección de definición de tarea de
volumes
, defina un volumen de datos con los valoresname
yDockerVolumeConfiguration
. En este ejemplo, especifique un alcancetask
para que el volumen se desmonte cuando finaliza la tarea. Utilice el controladorlocal
y configuredriverOpts
con las opcionestype
,device
yo
en consecuencia. SustituyaNFS_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
" } } } ] -
En la sección
containerDefinitions
, defina un contenedor con valoresmountPoints
que hagan referencia al nombre del volumen definido y el valorcontainerPath
en el que desea montar el volumen en el contenedor."containerDefinitions": [ { "name": "
container-1
", "mountPoints": [ { "sourceVolume": "NFS
", "containerPath": "/var/nfsmount
" } ] } ]