

# 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 ボリュームを使用して複数のコンテナの永続的ストレージを提供するには**

この例では、複数のコンテナで使用する共有ボリュームが必要で、また、使用するタスクの内の 1 つが停止した後も、このボリュームを維持する必要があります。組み込みの `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}}"
                  }
              ]
          }
      ]
   ```