Docker ボリューム
Docker ボリュームを使用している場合は、組み込みの local
ドライバーまたはサードパーティーのボリュームドライバーを使用できます。Docker ボリュームは Docker で管理され、ディレクトリはボリュームデータを含むコンテナインスタンスの /var/lib/docker/volumes
に作成されます。
Docker ボリュームを使用するには、タスク定義で dockerVolumeConfiguration
を指定します。詳細については、Use volumes
Docker ボリュームの一般的ユースケースは以下のとおりです。
-
コンテナで使用する永続データボリュームを提供する
-
定義したデータボリュームを同じコンテナインスタンス上の異なるコンテナにある別々の場所で共有する
-
空の非永続データボリュームを定義し、同じタスク内の複数のコンテナにマウントする
-
サードパーティー製ドライバーによって管理されるタスクに、データボリュームを提供する
Docker ボリュームに関する考慮事項
Docker ボリュームを使用する際は、以下の点を考慮します。
-
Docker ボリュームは、EC2 起動タイプ、または外部インスタンスを使用する場合にのみサポートされます。
-
Windows コンテナでは、
local
ドライバーの使用のみサポートされます。 -
サードパーティー製ドライバーを使用する場合は、コンテナエージェントを起動する前に、必ずドライバーをコンテナインスタンスにインストールしアクティブ化しておきます。エージェントを開始する前にサードパーティー製ドライバーがアクティブ化されていない場合は、以下のいずれかのコマンドを使用してコンテナエージェントを再起動することが可能です。
-
Amazon ECS に最適化された Amazon Linux 2 AMI の場合:
sudo systemctl restart ecs
-
Amazon ECS に最適化された Amazon Linux AMI の場合:
sudo stop ecs && sudo start ecs
-
タスク定義で Docker ボリュームを指定する
コンテナでデータボリュームを使用するには、ボリュームを指定し、タスク定義でポイント設定をマウントする必要があります。このセクションでは、コンテナのボリューム設定について説明します。Docker ボリュームを使用するdockerVolumeConfiguration
を指定します。バインドマウントのホストボリュームを使用するタスクで、host
とオプションの sourcePath
を指定します。
次のタスク定義の JSON スニペットに、コンテナの volumes
と mountPoints
オブジェクト用の構文を示します。
{ "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 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。この名前は、コンテナ定義
sourceVolume
のmountPoints
パラメータで参照されます。 dockerVolumeConfiguration
-
タイプ: オブジェクト
必須: いいえ
このパラメータは、Docker ボリュームを使用する場合に指定します。Docker ボリュームは、EC2 起動タイプを使用する場合にのみサポートされます。Windows コンテナでは、
local
ドライバーの使用のみサポートされます。バインドマウントを使用するには、代わりにhost
を指定します。scope
-
型: 文字列
有効な値:
task
|shared
必須: いいえ
Docker ボリュームのスコープ。これにより、ボリュームのライフサイクルが決定されます。Docker ボリュームの範囲が
task
の場合は、タスクが開始すると自動的にプロビジョンされ、タスクが停止すると破棄されます。Docker ボリュームの範囲がshared
の場合は、タスクの停止後も保持されます。 autoprovision
-
タイプ: ブール値
デフォルト値:
false
必須: いいえ
この値が
true
の場合、既に存在していない場合は Docker ボリュームが作成されます。このフィールドは、scope
がshared
の場合のみ使用されます。scope
がtask
の場合、このパラメータは省略するか、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
の 「Create a container (コンテナを作成する) 」セクションの Volumes
にマップされ、--volume
オプションは docker runにマップされます。 Windows コンテナは
$env:ProgramData
と同じドライブに全部のディレクトリをマウントできます。Windows コンテナは、別のドライブにディレクトリをマウントできません。また、マウントポイントは複数のドライブにまたがることはできません。sourceVolume
-
型: 文字列
必須: はい (
mountPoints
を使用する場合)マウントするボリュームの名前。
containerPath
-
型: 文字列
必須: はい (
mountPoints
を使用する場合)ボリュームをマウントするコンテナ上のパス。
readOnly
-
タイプ: ブール値
必須: いいえ
この値が
true
の場合、コンテナはボリュームへの読み取り専用アクセスを許可されます。この値がfalse
の場合、コンテナはボリュームに書き込むことができます。デフォルト値は、「false
」です。
例
以下に、Docker ボリュームの使用例を示します。
Docker ボリュームを使用してコンテナの非永続ストレージを提供する
この例では、コンテナは空のデータボリュームを使用しており、これはタスクが完了した後に破棄されます。ユースケースの一例としては、タスクの実行中に一部のスクラッチファイルストレージにアクセスする必要のあるコンテナが考えられます。このタスクは、Docker ボリュームを使用して行うことができます。
-
タスク定義の
volumes
セクションで、name
およびDockerVolumeConfiguration
値を使用して、データボリュームを定義します。この例では、タスクが停止した後にボリュームが削除されるように、範囲にtask
を指定して、組み込みのlocal
ドライバーを使用します。"volumes": [ { "name": "
scratch
", "dockerVolumeConfiguration" : { "scope": "task
", "driver": "local
", "labels": { "scratch
": "space
" } } } ] -
containerDefinitions
セクションで、定義したボリュームの名前を参照するmountPoints
値と、コンテナにボリュームをマウントするためのcontainerPath
値を使用して、コンテナを定義します。"containerDefinitions": [ { "name": "
container-1
", "mountPoints": [ { "sourceVolume": "scratch
", "containerPath": "/var/scratch
" } ] } ]
Docker ボリュームを使用してコンテナの永続的ストレージを提供する
この例では、複数のコンテナで使用する共有ボリュームが必要で、また、使用するタスクの内の 1 つが停止した後も、このボリュームを維持する必要があります。組み込みの local
ドライバーは使用中です。このためボリュームは、コンテナインスタンスのライフサイクルに紐付けられたままです。
-
タスク定義の
volumes
セクションで、name
およびDockerVolumeConfiguration
値を使用して、データボリュームを定義します。この例では、shared
スコープをボリュームが維持されるように指定し、自動プロビジョニングをtrue
に設定します。これは、使用するためのボリュームが作成されるようにするためです。また、組み込みのlocal
ドライバーも使用します。"volumes": [ { "name": "
database
", "dockerVolumeConfiguration" : { "scope": "shared
", "autoprovision": true, "driver": "local
", "labels": { "database
": "database_name
" } } } ] -
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 ボリュームを使用して実現できます。
-
タスク定義の
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
" } } } ] -
containerDefinitions
セクションで、定義したボリュームの名前を参照するmountPoints
値と、コンテナにボリュームをマウントするためのcontainerPath
値を使用して、コンテナを定義します。"containerDefinitions": [ { "name": "
container-1
", "mountPoints": [ { "sourceVolume": "NFS
", "containerPath": "/var/nfsmount
" } ] } ]