このドキュメントでは、Docker データディレクトリにディスクをマウントする方法について説明します。 ECS インスタンスで実行されるコンテナーおよびイメージの数が常に増加する場合、ECS インスタンスのディスク容量が不足する可能性があります。 この場合、 ECS インスタンスにディスクをマウントして、Docker データディレクトリを拡張することができます。

Docker データディレクトリ

Docker データは、 ユニオンファイルシステム (UnionFS) を使用して、ディスクに保存されます。 Docker のコンテナーデータおよびイメージデータは、デフォルトでは /var/lib/docker ディレクトリに保存されます。 du コマンドを実行して、このディレクトリで占有されるディスクスペースのサイズを表示できます。
# du -h --max-depth=0 /var/lib/docker
7.9G    /var/lib/docker

シナリオ

一般に、Docker イメージはディスクスペースの大量のディスク容量を占有します。 複数の Docker イメージまたは多数のコンテナーを使用する場合は、ディスクを Docker データディレクトリにマウントして、十分なディスク容量が使用できるようにする必要があります。

ディスクをマウントします。

ディスクを Docker データディレクトリにマウントするには、次の手順を実行してください。

  1. ディスクを作成し、ディスク容量を拡張したい対象の ECS インスタンスにマウントします。
    1. ECS コンソールにログインして、ディスクを作成します。
    2. 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
    3. 目的の ECS インスタンス ID を選択します。
    4. 左側のナビゲーションウィンドウで [ディスク] をクリックします。
    5. 右上隅の、[アタッチ] をクリックします。
    6. 表示されたダイアログボックスで、対象となるディスクのドロップダウンリストで、作成されたディスクを選択し、[OK] をクリックします。
    7. [アタッチ] をクリックして、新しいディスクを目的の ECS インスタンスへマウントし、/dev/xvd* または /dev/vd* の形式で、新しいディスクマウントポイントを記録します。
  2. 対象の ECS インスタンスにログインし、新しいディスクをフォーマットします。
    1. ls -l /dev/xvd* または ls -l /dev/vd* コマンドを実行し、記録されたマウントポイントを持つディスクが ECS インスタンスにマウントされたかどうかを確認します。
    2. fdisk コマンドを実行し、新しいディスクをパーティション化します。次に、mkfs.ext4 コマンドを実行し、新しいディスクをフォーマットします。
  3. Docker データを新しいディスクに移行します。

    対象となる ECS インスタンスで実行されるアプリケーションを一時停止したくない場合、アプリケーションを移行する必要があります。 Swarm クラスターでアプリケーションを移行する方法については、「指定ノードのスケジューリング」 をご参照ください。 Kubernetes クラスターでアプリケーションを移行する方法については、『Safely drain a node while respecting application SLOs』をご参照ください。

    1. データを確実に移行するには、docker stop コマンドを実行し、Docker デーモンを停止し、service kubelet stop コマンドを実行して、kubelet を停止します。
    2. Docker ディレクトリデータをバックアップディレクトリに移行します。 例:mv /var/lib/docker /var/lib/docker_data
    3. 新しいディスクを、/var/lib/docker および、/var/lib/kubelet ディレクトリにマウントします。 たとえば、
      echo "/dev/xvdb1    /var/lib/container/     ext4    defaults        0 0" >>/etc/fstab
      echo "/var/lib/container/kubelet /var/lib/kubelet none defaults,bind 0 0" >>/etc/fstab
      echo "/var/lib/container/docker /var/lib/docker none defaults,bind 0 0" >>/etc/fstab
      
      
      mkdir /var/lib/docker
      
      mount -a
    4. バックアップされた Docker データを新しいディスクに移行します。 例:mv /var/lib/docker_data/* /var/lib/docker/
  4. Docker デーモンと kubelet を起動し、 データの場所を確認します。
    1. service docker start コマンドを実行して、Docker デーモンを開始し、kubelet start コマンドを実行して、kubelet を実行します。
    2. df コマンドを実行して、/var/lib/docker が新しいディスクにマウントされたかどうか確認します。 Kubernetes クラスターを起動する必要がある場合は、この手順をスキップします。
    3. docker ps コマンドを実行して、コンテナーが失われたかどうかを確認します。 必要に応じて、コンテナーを再起動します。 たとえば、restart:always ラベルが設定されていないコンテナーを再起動できます。
  5. コンテナーがその他のノードに移行されている場合、新しいディスクをマウントしたノードに戻るようスケジュールできます。

詳しくは、「Container Service の概要」をご参照ください。