

# 适用于 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}}"
                  }
              ]
          }
      ]
   ```