メニュー
Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

ストレージ設定

デフォルトでは、Amazon ECS に最適化された AMI は 30 GiB のストレージ容量が装備されています。この値は起動時に変更して、コンテナインスタンスで使用可能なストレージを増減させることができます。このストレージは、オペレーティングシステム用と Docker イメージおよびメタデータ用に使用されます。以下のセクションでは、AMI バージョンに基づいて、Amazon ECS に最適化された AMI のストレージ設定について説明します。

バージョン 2015.09.d 以降

バージョン 2015.09.d 以降の Amazon ECS 最適化 AMI では、起動時に、オペレーティングシステム用に 8 GiB ボリュームが /dev/xvda にアタッチされ、ファイルシステムのルートとしてマウントされます。また、Docker によるイメージとメタデータの保存用に 22 GiB のボリュームが /dev/xvdcz に追加でアタッチされます。ボリュームは論理ボリューム管理 (LVM) デバイスとして設定され、devicemapper バックエンドを介して Docker によって直接アクセスされます。ボリュームがマウントされていないため、使用可能なストレージを標準のストレージ情報コマンド (df -h など) で判断することはできません。ただし、LVM コマンドと docker info を使用して、以下の手順に従って、使用可能なストレージを見つけることができます。詳細については、The Linux Documentation Project の「LVM HOWTO」を参照してください。

注記

これらのデフォルトのボリュームサイズを増やすには、インスタンスの起動時にブロックデバイスマッピング設定を変更します。ただし、デフォルトよりも小さいボリュームサイズを指定することはできません。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「ブロックデバイスマッピング」を参照してください。

docker-storage-setup ユーティリティによって、インスタンスの起動時、Docker 用に LVM ボリュームグループと論理ボリュームが設定されます。デフォルトでは、docker-storage-setupdocker という名前のボリュームグループを作成し、/dev/xvdcz を物理ボリュームとしてそのグループに追加します。次に、ボリュームグループで使用可能なストレージの 99% を使用する docker-pool という論理ボリュームを作成します。使用可能なストレージの残りの 1% はメタデータ用に予約されます。

注記

Amazon ECS に最適化された AMI の以前のバージョン (2015.09.d2016.03.a) では、ボリュームグループに使用可能なストレージの 40% を使用する論理ボリュームが作成されます。論理ボリュームの 60% がいっぱいになると、論理ボリュームのサイズは 20% 増加します。

Docker の使用可能なストレージを判断するには

  • LVM コマンド (vgslvs) または docker info コマンドを使用して、Docker の使用可能なストレージを表示できます。

    注記

    LVM コマンド出力によってストレージ値が GiB (2^30 バイト) で表示され、docker info によってストレージ値が GB (10^9 バイト) で表示されます。

    1. vgs コマンドにより、ボリュームグループの使用可能なストレージを表示できます。このコマンドにより、ボリュームグループの合計サイズと、論理ボリュームの拡張に使用できる領域が表示されます。以下の例では、22 GiB のボリュームで 204 MiB の空き領域があることが示されています。

      [ec2-user ~]$ sudo vgs

      出力:

      VG #PV #LV #SN Attr VSize VFree docker 1 1 0 wz--n- 22.00g 204.00m
    2. lvs コマンドにより、論理グループの使用可能な領域を表示できます。以下の例では、21.75 GiB のサイズの論理ボリュームで 7.63% がいっぱいになっていることが示されています。この論理ボリュームは、ボリュームグループに空き領域がなくなるまで拡張できます。

      [ec2-user@ ~]$ sudo lvs

      出力:

      LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot--- 21.75g 7.63 4.96
    3. docker info コマンドにより、使用中のデータスペースの量、使用可能なデータスペースの量に関する情報も得られます。ただし、使用可能な領域の値は、使用中の論理ボリュームのサイズに基づきます。

      注記

      docker info はストレージ値を、GiB (2^30 バイト) ではなく、GB (10^9 バイト) で表示するため、ここで表示される値は lvs で表示される同じ量のストレージよりも大きく見えます。ただし、その値は同じです (23.35 GB = 21.75 GiB)。

      [ec2-user ~]$ docker info | grep "Data Space"

      出力:

      Data Space Used: 1.782 GB Data Space Total: 23.35 GB Data Space Available: 21.57 GB

Docker 論理ボリュームを拡張するには

コンテナインスタンスにストレージを追加する最も簡単な方法は、既存のインスタンスを終了し、サイズを増加したデータストレージボリュームで新しいインスタンスを起動することです。ただし、この方法を実行できない場合は、以下の手順に従って、Docker 用のボリュームグループにストレージを追加し、その論理ボリュームを拡張できます。

注記

コンテナインスタンスストレージがあまりにも速くいっぱいになる場合は、以下のいくつかの対処方法があります。

  • (Amazon ECS コンテナエージェント 1.8.0 以降) 停止または終了したコンテナがコンテナインスタンスに残る時間を短くします。ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION エージェント設定変数で、タスクが停止されてから Docker コンテナが削除されるまでの時間を設定します (デフォルトでは、この値は 3 時間です)。これにより Docker コンテナのデータは削除されます。この値を低く設定すると、停止したコンテナを検査したり、ログを削除する前にログを表示したりすることができない場合があります。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

  • 実行されていないコンテナと未使用のイメージをコンテナインスタンスから削除します。次のコマンドの例を使用して、停止したコンテナと未使用のイメージを手動で削除することができます。削除されたコンテナを後から検査することはできません。削除されたイメージは、新しいコンテナを開始する前に、再度プルする必要があります。

    実行中でないコンテナを削除するには、コンテナインスタンスで以下のコマンドを実行します。

    $ docker rm $(docker ps -aq)

    使用されていないイメージを削除するには、コンテナインスタンスで以下のコマンドを実行します。

    $ docker rmi $(docker images -q)
  • コンテナ内で使用されていないデータブロックを削除します。以下のコマンドを使用して、実行中のコンテナで fstrim を実行し、コンテナファイルシステムによって使用されていないデータブロックを破棄できます。

    $ sudo sh -c "docker ps -q | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/"
  1. コンテナインスタンスと同じアベイラビリティーゾーンに新しい Amazon EBS ボリュームを作成します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Amazon EBS ボリュームの作成」を参照してください。

  2. ボリュームをコンテナインスタンスにアタッチします。Docker データボリュームのデフォルトの場所は /dev/xvdcz です。整合性を保つために、追加のボリュームはそのデバイス名のアルファベットの降順でアタッチします (/dev/xvdcy など)。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「インスタンスへの Amazon EBS ボリュームのアタッチ」を参照してください。

  3. コンテナインスタンスに SSH で接続します。詳細については、「コンテナインスタンスへの接続」を参照してください。

  4. docker-pool 論理ボリュームのサイズを確認します。以下の例では、論理ボリュームが 409.19 GiB であることが示されています。

    [ec2-user ~]$ sudo lvs

    出力:

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot--- 409.19g 0.16 0.08
  5. ボリュームグループの現在の空き領域を確認します。以下の例では、VFree 列に 612.75 GiB が表示されています。

    [ec2-user ~]$ sudo vgs

    出力:

    VG #PV #LV #SN Attr VSize VFree docker 1 1 0 wz--n- 1024.00g 612.75g
  6. 新しいボリュームを docker ボリュームグループに追加します (デバイス名は新しいボリュームのアタッチ先のデバイス名に置き換えます)。この例では、1-TiB のボリュームがあらかじめ追加され、/dev/xvdcy にアタッチされました。

    [ec2-user ~]$ sudo vgextend docker /dev/xvdcy Physical volume "/dev/sdcy" successfully created Volume group "docker" successfully extended
  7. vgs コマンドを使用して、ボリュームグループのサイズが増加したことを確認します。VFree 列には、ストレージの増加したサイズが表示されます。以下の例では、VFree 列に 1.6 TiB が表示されて、以前よりも 1 TiB 大きくなっています。VFree 列は、元の VFree 値とアタッチしたボリュームのサイズの合計になっています。

    [ec2-user ~]$ sudo vgs

    出力:

    VG #PV #LV #SN Attr VSize VFree docker 2 1 0 wz--n- 2.00t 1.60t
  8. 先ほど追加したボリュームのサイズで docker-pool 論理ボリュームを拡張します。以下のコマンドは、論理ボリュームに 1,024 GiB を追加します。1024G

    [ec2-user ~]$ sudo lvextend -L+1024G /dev/docker/docker-pool

    出力:

    Size of logical volume docker/docker-pool_tdata changed from 409.19 GiB (104752 extents) to 1.40 TiB (366896 extents). Logical volume docker-pool successfully resized
  9. 論理ボリュームのサイズが増加したことを確認します。

    [ec2-user ~]$ sudo lvs

    出力:

    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert docker-pool docker twi-aot--- 1.40t 0.04 0.12
  10. (オプション) 追加されたストレージ領域が docker info でも認識されることを確認します。

    注記

    docker info はストレージ値を、GiB (2^30 バイト) ではなく、GB (10^9 バイト) で表示するため、ここで表示される値は lvs で表示される同じ量のストレージよりも大きく見えます。ただし、その値は同じです (1.539 TB =1.40 TiB)。

    [ec2-user ~]$ docker info | grep "Data Space"

    出力:

    Data Space Used: 109.6 MB Data Space Total: 1.539 TB Data Space Available: 1.539 TB

バージョン 2015.09.c 以前

2015.09.c 以前のバージョンの Amazon ECS 最適化 AMI では、起動時に、1 つの 30 GiB ボリュームが /dev/xvda にアタッチされ、ファイルシステムのルートとしてマウントされます。このボリュームは、オペレーティングシステムと、Docker のすべてのイメージおよびメタデータによって共有されます。標準のストレージ情報コマンド (df -h など) により、コンテナインスタンスの使用可能なストレージを判断できます。

これらの AMI から起動されたインスタンスを停止せずに、Docker 用にストレージを追加する実用的な方法はありません。コンテナインスタンスにデフォルトの 30 GiB よりも大きいストレージが必要な場合は、各インスタンスを削除する必要があります。その後、最新の Amazon ECS 最適化 AMI と十分なデータストレージボリュームがある別の場所で、別のインスタンスを起動します。