

# 适用于 Amazon ECS 的 Docker 卷示例
<a name="docker-volume-examples"></a>

以下示例说明如何为容器提供临时存储、如何为多个容器提供共享卷，以及如何为容器提供 NFS 持久性存储。

**要使用 Docker 卷为容器提供临时存储**

在此示例中，容器使用在任务完成后处置的空数据卷。一个示例使用案例为，您可能具有一个需要在任务期间访问某个临时文件存储位置的容器。可以使用 Docker 卷实现此任务。

1. 在任务定义 `volumes` 部分中，使用 `name` 和 `DockerVolumeConfiguration` 值定义数据卷。在此示例中，我们将范围指定为 `task`，以便在任务停止后删除此卷并使用内置的 `local` 驱动程序。

   ```
   "volumes": [
       {
           "name": "scratch",
           "dockerVolumeConfiguration" : {
               "scope": "task",
               "driver": "local",
               "labels": {
                   "scratch": "space"
               }
           }
       }
   ]
   ```

1. 在 `containerDefinitions` 部分中，使用引用已定义卷的名称的 `mountPoints` 值和将卷挂载到容器上所在的 `containerPath` 值定义容器。

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

**使用 Docker 卷为多个容器提供持久性存储**

在本示例中，您希望多个容器使用一个共享卷，并希望在使用此卷的任何单个任务停止后该卷持续存在。正在使用的是内置的 `local` 驱动程序。以便该卷仍绑定到容器实例的生命周期。

1. 在任务定义 `volumes` 部分中，使用 `name` 和 `DockerVolumeConfiguration` 值定义数据卷。在此示例中，指定 `shared` 范围以便卷持续存在，将自动预置设置为 `true`。这样就可以创建卷以供使用。然后，还可使用内置的 `local` 驱动程序。

   ```
   "volumes": [
       {
           "name": "database",
           "dockerVolumeConfiguration" : {
               "scope": "shared",
               "autoprovision": true,
               "driver": "local",
               "labels": {
                   "database": "database_name"
               }
           }
       }
   ]
   ```

1. 在 `containerDefinitions` 部分中，使用引用已定义卷的名称的 `mountPoints` 值和将卷挂载到容器上所在的 `containerPath` 值定义容器。

   ```
   "containerDefinitions": [
       {
           "name": "container-1",
           "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       },
       {
         "name": "container-2",
         "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       }
     ]
   ```

**使用 Docker 卷为容器提供 NFS 持久性存储**

 在此示例中，容器使用 NFS 数据卷，该数据卷在任务启动时自动挂载，在任务停止时自动卸载。这使用了 Docker 内置 `local` 驱动程序。一个示例使用案例为，您可能具有本地 NFS 存储，并且需要从 ECS Anywhere 任务访问该存储。可以通过带有 NFS 驱动程序选项的 Docker 卷实现此目标。

1. 在任务定义 `volumes` 部分中，使用 `name` 和 `DockerVolumeConfiguration` 值定义数据卷。在此示例中，指定 `task` 范围以便在任务停止后卸载卷。使用 `local` 驱动程序并使用 `type`、`device` 和 `o` 选项相应地配置 `driverOpts`。`NFS_SERVER` 替换为 NFS 服务器端点。

   ```
   "volumes": [
          {
              "name": "NFS",
              "dockerVolumeConfiguration" : {
                  "scope": "task",
                  "driver": "local",
                  "driverOpts": {
                      "type": "nfs",
                      "device": "$NFS_SERVER:/mnt/nfs",
                      "o": "addr=$NFS_SERVER"
                  }
              }
          }
      ]
   ```

1. 在 `containerDefinitions` 部分中，使用引用已定义卷的名称的 `mountPoints` 值和将卷挂载到容器上所在的 `containerPath` 值定义容器。

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