Docker ボリューム - Amazon Elastic Container Service

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Docker ボリューム

Docker ボリュームを使用している場合は、組み込みの local ドライバーまたはサードパーティーのボリュームドライバーを使用できます。Docker ボリュームは Docker で管理され、ディレクトリはボリュームデータを含むコンテナインスタンスの /var/lib/docker/volumes に作成されます。

Docker ボリュームを使用するには、タスク定義で を指定します。詳細については、Use volumes を参照してください。

Docker ボリュームの一般的ユースケースは以下のとおりです。

  • コンテナで使用する永続データボリュームを提供する

  • 定義したデータボリュームを同じコンテナインスタンス上の異なるコンテナにある別々の場所で共有する

  • 空の非永続データボリュームを定義し、同じタスク内の複数のコンテナにマウントする

  • サードパーティーのドライバーによって管理されるタスクにデータボリュームを提供する

Docker ボリュームに関する考慮事項

Docker ボリュームを使用する際には、以下の点を考慮する必要があります。

  • Docker ボリュームは、EC2 起動タイプを使用する場合にのみサポートされます。

  • Windows コンテナでは、local ドライバーの使用のみサポートされます。

  • サードパーティーのドライバーを使用する場合は、コンテナインスタンスにインストールし、アクティブになってからコンテナエージェントを起動する必要があります。エージェントを開始する前にサードパーティードライバーがアクティブでない場合は、次のいずれかのコマンドを使用してコンテナエージェントを再起動できます。

    • Amazon ECS-optimized Amazon Linux 2 AMI の場合:

      sudo systemctl restart ecs
    • Amazon ECS-optimized Amazon Linux AMI の場合:

      sudo stop ecs && sudo start ecs

タスク定義で Docker ボリュームを指定する

コンテナでデータボリュームを使用するには、ボリュームを指定し、タスク定義でポイント設定をマウントする必要があります。このセクションでは、コンテナのボリューム設定について説明します。Docker ボリュームを使用するタスクで、dockerVolumeConfiguration を指定します。バインドマウントのホストボリュームを使用するタスクで、host とオプションの sourcePath を指定します。

以下に示すタスク定義の JSON は、コンテナの volumesmountPoints オブジェクトの構文を示します。

{ "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

型: 文字列

必須: いいえ

ボリュームの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。この名前は、コンテナの定義 mountPoints オブジェクトの sourceVolume パラメータで参照されます。

dockerVolumeConfiguration

型: オブジェクト

必須: いいえ

このパラメータは、Docker ボリュームを使用する場合に指定します。Docker ボリュームは、EC2 インスタンスでタスクを実行する場合にのみサポートされます。Windows コンテナでは、 ドライバーの使用のみサポートされます。バインドマウントを使用するには、代わりに host を指定します。

scope

型: 文字列

有効な値: task | shared

必須: いいえ

Docker ボリュームのスコープ。これにより、ボリュームのライフサイクルが決定されます。Docker ボリュームの範囲が task の場合は、タスクが開始すると自動的にプロビジョンされ、タスクがクリーンアップされると破棄されます。Docker ボリュームの範囲が の場合は、タスクの停止後も保持されます。

autoprovision

タイプ: ブール値

デフォルト値: false

必須: いいえ

この値が true の場合は、Docker ボリュームが作成されます (まだ存在していない場合)。このフィールドは、scopeshared の場合のみ使用されます。scopetask の場合、このパラメータは省略するか、false に設定する必要があります。

driver

型: 文字列

必須: いいえ

使用する Docker ボリュームドライバーの名前。ドライバーの値は、タスク配置に使用されるため、Docker で提供されているドライバー名と一致する必要があります。ドライバーが Docker プラグイン CLI を使用してインストール済みである場合は、docker plugin ls を使用してコンテナインスタンスからドライバー名を取得します。ドライバーが別の方法を使用してインストール済みである場合は、Docker プラグインの検出を使用してドライバー名を取得します。詳細については、「Docker プラグインの検出」を参照してください。このパラメータは、Docker Remote API の「ボリュームの作成」セクションの Driver と、「docker volume create」の --driver オプションにマッピングされます。

driverOpts

型: 文字列

必須: いいえ

パススルーする Docker ドライバー固有のオプションのマップ。このパラメータは、Docker Remote API の「ボリュームの作成」セクションの DriverOpts と、「docker volume create」の --opt オプションにマッピングされます。

labels

型: 文字列

必須: いいえ

Docker ボリュームに追加するカスタムメタデータ。このパラメータは、Docker Remote API の「ボリュームの作成」セクションの Labels と、「docker volume create」の --label オプションにマッピングされます。

mountPoints

タイプ: オブジェクト配列

必須: いいえ

コンテナでのデータボリュームのマウントポイント。

このパラメータは、Docker Remote APIコンテナを作成する セクションの Volumes にマッピングし、--volume オプションを docker run にマッピングします。

Windows コンテナは $env:ProgramData と同じドライブに全部のディレクトリをマウントできます。Windows コンテナは、別のドライブにディレクトリをマウントできません。また、マウントポイントは複数のドライブにまたがることはできません。

sourceVolume

タイプ: 文字列

必須: はい (mountPoints を使用する場合)

マウントするボリュームの名前。

containerPath

タイプ: 文字列

必須: はい (mountPoints を使用する場合)

ボリュームをマウントするコンテナ上のパス。

readOnly

タイプ: ブール値

必須: いいえ

この値が true の場合、コンテナはボリュームへの読み取り専用アクセスを許可されます。この値が false の場合、コンテナはボリュームに書き込むことができます。デフォルト値は false です。

以下は Docker ボリュームの使用例です。

Docker ボリュームを使用してコンテナの非永続ストレージを提供する

この例では、タスク終了後に保持しない空のデータボリュームをコンテナで使用します。たとえば、タスクの実行中に一部のスクラッチファイルストレージにアクセスする必要のあるコンテナがあるとします。このタスクは、Docker ボリュームを使用して行うことができます。

  1. タスク定義の volumes セクションで、name および DockerVolumeConfiguration 値を使用して、データボリュームを定義します。この例では、タスクが停止した後にボリュームが削除されるように、範囲に task を指定して、組み込みの local ドライバーを使用します。

    "volumes": [ { "name": "scratch", "dockerVolumeConfiguration" : { "scope": "task", "driver": "local", "labels": { "scratch": "space" } } } ]
  2. 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" } } } ]
  2. containerDefinitions セクションで、定義したボリュームの名前を参照する mountPoints 値と、コンテナにボリュームをマウントするための containerPath 値を使用して、コンテナを定義します。

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