Amazon ECS でのバインドマウントの使用
バインドマウントでは、ホスト (Amazon EC2 インスタンスなど) 上のファイルまたはディレクトリがコンテナにマウントされます。バインドマウントは、Fargate インスタンスと Amazon EC2 インスタンスの両方でホストされているタスクでサポートされています。バインドマウントは、それらを使用するコンテナのライフサイクルに紐付けられています。タスクが停止するなど、バインドマウントを使用するすべてのコンテナが停止すると、データが削除されます。Amazon EC2 インスタンスでホストされているタスクの場合、タスク定義で host
とオプションの sourcePath
値を指定することにより、ホスト側 Amazon EC2 インスタンスのライフサイクルにデータを紐付けすることができます。詳細については、Docker ドキュメントの「Bind mounts
バインドマウントの一般的なユースケースは以下のとおりです。
-
1 つ以上のコンテナにマウントするための空のデータボリュームを提供する。
-
1 つ以上のコンテナにホストデータボリュームをマウントする。
-
ソースコンテナのデータボリュームを、同じタスク内の他のコンテナと共有する。
-
Dockerfile から 1 つ以上のコンテナにパスとその内容を公開する。
バインドマウントを使用するときの考慮事項
バインドマウントを使用する際には、以下の点を考慮してください。
-
プラットフォームバージョン
1.4.0
以降 (Linux) または1.0.0
以降 (Windows) を使用して AWS Fargate でホストされているタスクの場合、デフォルトでは、バインドマウント用に最低 20 GiB の一時ストレージが割り当てられます。タスク定義でephemeralStorage
パラメータを指定することによって、一時ストレージの総量を最大 200 GiB まで増やすことができます。 -
タスクの実行時に Dockerfile のファイルをデータボリュームに公開するために、Amazon ECS データプレーンが
VOLUME
ディレクティブを探します。VOLUME
ディレクティブで指定された絶対パスが、タスク定義で指定されたcontainerPath
と同じである場合、VOLUME
ディレクティブパス内のデータがデータボリュームにコピーされます。次の Dockerfile の例では、/var/log/exported
ディレクトリにあるexamplefile
という名前のファイルがホストに書き込まれ、その後でコンテナ内にマウントされます。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p
/var/log/exported
RUN touch/var/log/exported/examplefile
VOLUME ["/var/log/exported
"]デフォルトでは、ボリューム許可は
0755
に設定され、所有者はroot
に設定されます。これらのアクセス許可は Dockerfile でカスタマイズできます。次の例では、ディレクトリの所有者をnode
として定義しています。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useradd
node
RUN mkdir -p /var/log/exported && chownnode
:node
/var/log/exported RUN touch /var/log/exported/examplefile USERnode
VOLUME ["/var/log/exported"] -
Amazon EC2 インスタンスでホストされているタスクで、
host
値とsourcePath
値が指定されていない場合には、Docker デーモンがバインドマウントを自動的に管理します。このバインドマウントを参照するコンテナが存在しない場合、このマウントは、Amazon ECS コンテナエージェントのタスククリーンアップサービスによって最終的に削除されます。デフォルトでは、この処理はコンテナが終了してから 3 時間後に実行されま。また、この期間はECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
エージェント変数により設定することも可能です。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。コンテナのライフサイクルを通じてこのデータを永続化する必要がある場合は、バインドマウントのsourcePath
値を指定します。