マウントのバインド - Amazon Elastic Container Service

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

マウントのバインド

バインド・マウントでは、ホスト・マシン上のファイルまたはディレクトリが コンテナ。バインド マウント ホスト ボリュームは、 EC2 起動タイプ。

バインド マウント ホスト ボリュームをタスクで使用するには、 EC2 起動タイプ、 指定 host およびオプション sourcePath 業務の価値 定義。詳細については、以下を参照してください。 bind の使用 マウント.

注記

のタスクストレージに関する情報は、 Amazon ECS に Fargate タスクについては、を参照してください。 Fargate タスクストレージ.

バインド マウントの一般的な使用例は次のとおりです。

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

  • 空の非永続データ ボリュームを定義し、複数の 同じコンテナインスタンス上のコンテナ

  • 定義されたデータボリュームを異なる場所の異なる 同じコンテナインスタンス上のコンテナ

タスクのバインド マウントの指定 定義

コンテナでバインド マウント ホスト ボリュームを使用する前に、 ボリュームおよびマウント ポイントの構成を、タスク定義で実行します。このセクション では、コンテナのボリューム構成について説明します。バインドを使用するタスクの場合 マウント ホスト ボリューム、 host 値とオプション sourcePath 値。

次のタスク定義JSONスニペットは、 volumes および mountPoints のオブジェクト コンテナ:

{ "family": "", ... "containerDefinitions" : [ { "mountPoints" : [ { "containerPath" : "/path/to/mount_volume", "sourceVolume" : "string" } ], "name" : "string" } ], ... "volumes" : [ { "host" : { "sourcePath" : "string" }, "name" : "string" } ] }
name

型: 文字列

必須: いいえ

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

host

必須: いいえ

バインドマウントを使用する場合、このパラメータが指定されます。Docker ボリュームを使用するには、代わりに dockerVolumeConfiguration を指定します。host パラメータの内容により、バインドマウントのデータボリュームがホストコンテナインスタンスで保持されるかどうかと、その保存場所が決まります。host パラメーターが空の場合、Docker デーモンはデータボリュームのホストパスを割り当てますが、関連付けられたコンテナの実行が停止した後にデータが保持されるとは限りません。

バインドマウントのホストボリュームは、EC2 起動タイプ、または Fargate 起動タイプ使用時にサポートされています。

Windows コンテナは $env:ProgramData と同じドライブに全部のディレクトリをマウントできます。

sourcePath

型: 文字列

必須: いいえ

host パラメータを使用する場合は、sourcePath を指定して、コンテナに表示されるホストコンテナインスタンスのパスを宣言します。このパラメータが空の場合は、Docker デーモンによってホストパスが割り当てられています。host パラメータに sourcePath の場所が含まれている場合、データボリュームは手動で削除するまでホストコンテナインスタンスの指定された場所に保持されます。sourcePath の場所がホストコンテナインスタンスに存在しない場は、Docker デーモンによって作成されます。その場所が存在する場合は、ソースパスフォルダーの内容がエクスポートされます。

mountPoints

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

必須: いいえ

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

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

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

sourceVolume

タイプ: 文字列

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

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

containerPath

タイプ: 文字列

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

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

readOnly

タイプ: ブール値

必須: いいえ

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

Examples

バインドを使用してコンテナに非永続性の空のストレージを提供するには マウント

場合によっては、コンテナが同じ空のデータ量を共有したいとします。 でも、タスクの終了後にデータを保持することには興味がありません。たとえば、 スクラッチ ファイルの保存場所が同じです。このタスクは Dockerボリュームまたはバインドマウントホストボリュームのいずれかを使用する。

  1. タスク定義内 volumes セクション、バインドの定義 名前を付けてマウント database_scratch.

    注記

    なぜなら、 database_scratch バインドマウントは ソースパスを指定すると、Dockerデーモンは 皆さん。このバインドマウントを参照するコンテナがない場合、 Amazon ECS コンテナエージェントのタスククリーンアップサービスは最終的にそれを削除します( コンテナが退出してから3時間後にこの処理が行われますが、 この期間を ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION エージェント 変数)。詳細については、以下を参照してください。 Amazon ECS コンテナエージェントの設定. このデータを保持する必要がある場合は、 sourcePath バインド マウントの値。

    "volumes": [ { "name": "database_scratch", "host": {} } ]
  2. containerDefinitions セクション、データベースの作成 コンテナ定義を非永続的に ストレージ。

    "containerDefinitions": [ { "name": "database1", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] }, { "name": "database2", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] } ]

バインド マウントを使用してコンテナに永続的なストレージを提供するには

バインドマウントを使用する場合、 sourcePath 値が指定されています 参照したすべてのコンテナが停止した後でも、データは保持されます。にあるすべてのファイル sourcePath は、 コンテナの containerPath 値、および に書き込まれる containerPath 値は sourcePath コンテナインスタンスの値。

重要

Amazon ECS はコンテナインスタンス間でストレージを同期しません。タスク パーシステント ストレージを使用するコンテナ インスタンスは、 使用可能な容量を持つクラスタ。タスクに 停止と再起動の後、常に タスクの起動時に同じコンテナインスタンスを AWS CLI 開始-タスク コマンド。

  1. タスク定義内 volumes セクション、バインドの定義 マウント name および sourcePath 値。

    "volumes": [ { "name": "webdata", "host": { "sourcePath": "/ecs/webdata" } } ]
  2. containerDefinitions セクション、コンテナーの定義 付き mountPoints 値。 定義されたバインドマウントと containerPath マウントする値 コンテナの にマウントをバインドします。

    "containerDefinitions": [ { "name": "web", "image": "nginx", "cpu": 99, "memory": 100, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webdata", "containerPath": "/usr/share/nginx/html" } ] } ]

定義済みボリュームを複数のコンテナにマウントするには

タスク定義でデータ ボリュームを定義し、そのボリュームを 異なるコンテナ上の異なる場所。たとえば、ホストは コンテナには、 /data/webroot, このデータ ボリュームを読み取り専用として2つの異なるWebにマウントできます。 異なるドキュメントルートを持つサーバー。

  1. タスク定義内 volumes セクション、データの定義 という名前のボリューム webroot およびソースパス /data/webroot.

    "volumes": [ { "name": "webroot", "host": { "sourcePath": "/data/webroot" } } ]
  2. containerDefinitions セクション、コンテナーの定義 各ウェブサーバーについて mountPoints 価値は の webroot ボリュームと containerPath コンテナのドキュメントルートを指す値。

    "containerDefinitions": [ { "name": "web-server-1", "image": "my-repo/ubuntu-apache", "cpu": 100, "memory": 100, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webroot", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "web-server-2", "image": "my-repo/sles11-apache", "cpu": 100, "memory": 100, "portMappings": [ { "containerPort": 8080, "hostPort": 8080 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webroot", "containerPath": "/srv/www/htdocs", "readOnly": true } ] } ]

を使用して別のコンテナからボリュームをマウントするには volumesFrom

コンテナに 1 つ以上のボリュームを定義し、 volumesFrom 異なるコンテナー定義のパラメーター (同じタスク内で)すべてのボリュームを sourceContainer 元の定義されたマウント ポイントで。は volumesFrom パラメータ は、 タスク定義、および Dockerfile。

  1. (オプション)イメージに組み込まれているボリュームを共有するには、 ボリュームを VOLUME 指示。次の例では、Dockerfileは httpd イメージを追加し、ボリュームを dockerfile_volume Apacheドキュメントのルート(つまり によって使用されるフォルダ httpd ウェブサーバー):

    FROM httpd VOLUME ["/usr/local/apache2/htdocs/dockerfile_volume"]

    このDockerfileでイメージを作成し、 Docker Hubなどのリポジトリをタスク定義で使用します。は 例 my-repo/httpd_dockerfile_volume で使用されるイメージ 上記のDockerfileで以下のステップが構築されました。

  2. 他のボリュームとマウントを定義するタスク定義を作成する コンテナの点。この例では、 volumes セクション、 という空のボリュームを作成します。 empty、Docker デーモンが管理します。また、 host_etcは、 /etc フォルダ ホストコンテナインスタンス。

    { "family": "test-volumes-from", "volumes": [ { "name": "empty", "host": {} }, { "name": "host_etc", "host": { "sourcePath": "/etc" } } ],

    [コンテナー定義] セクションで、マウントするコンテナーを作成します。 先ほど定義したボリューム。この例では、 web container(Dockerfile内のボリュームで構築されたイメージを使用する) マウントする empty および host_etc ボリューム。

    "containerDefinitions": [ { "name": "web", "image": "my-repo/httpd_dockerfile_volume", "cpu": 100, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "empty", "containerPath": "/usr/local/apache2/htdocs/empty_volume" }, { "sourceVolume": "host_etc", "containerPath": "/usr/local/apache2/htdocs/host_etc" } ], "essential": true },

    を使用する別のコンテナを作成する volumesFrom 取り付ける に関連づけられているすべてのボリューム web コンテナ。すべてのボリュームが web コンテナは 同様に busybox コンテナ( Dockerfileで指定されたボリューム( my-repo/httpd_dockerfile_volume 画像)。

    { "name": "busybox", "image": "busybox", "volumesFrom": [ { "sourceContainer": "web" } ], "cpu": 100, "memory": 500, "entryPoint": [ "sh", "-c" ], "command": [ "echo $(date) > /usr/local/apache2/htdocs/empty_volume/date && echo $(date) > /usr/local/apache2/htdocs/host_etc/date && echo $(date) > /usr/local/apache2/htdocs/dockerfile_volume/date" ], "essential": false } ] }

    このタスクを実行すると、2つのコンテナがボリュームをマウントし、 commandbusybox コンテナの書き込み というファイルの日時 date それぞれに ボリュームフォルダ。フォルダは、 の web コンテナ。

    注記

    なぜなら、 busybox コンテナがクイックコマンドを実行する 終了したら、 "essential": false () コンテナ定義。そうでない場合、タスク全体が停止します。 出てきます