docker container update コマンドでコンテナリソースを変更する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker container updateコマンドを使用して実行中の Docker コンテナのリソース制限と再起動ポリシーを動的に変更する方法を学びます。最初に CPU とメモリ制限を設定したコンテナを作成します。

コンテナ作成後、コンテナの CPU 共有 (CPU shares) とメモリ制限を更新してリソース割り当てを調整する方法を探ります。最後に、コンテナの再起動ポリシーを変更し、Docker がさまざまなシナリオでコンテナの再起動をどのように処理するかを制御する方法を学びます。この実践的な経験を通じて、Docker におけるコンテナリソース管理の柔軟性と強力さを実感できるでしょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555127{{"docker container update コマンドでコンテナリソースを変更する方法"}} docker/rm -.-> lab-555127{{"docker container update コマンドでコンテナリソースを変更する方法"}} docker/exec -.-> lab-555127{{"docker container update コマンドでコンテナリソースを変更する方法"}} docker/inspect -.-> lab-555127{{"docker container update コマンドでコンテナリソースを変更する方法"}} docker/pull -.-> lab-555127{{"docker container update コマンドでコンテナリソースを変更する方法"}} end

初期リソース制限付きコンテナの作成

このステップでは、Docker コンテナを作成し、CPU とメモリの初期リソース制限を設定する方法を学びます。リソース制限は、単一のコンテナがホストマシンの全リソースを消費するのを防ぐために重要であり、他のコンテナやホスト自体のパフォーマンスに影響を与える可能性があります。

まず、Docker Hub からubuntuイメージをプルしましょう。このイメージをコンテナのベースとして使用します。

docker pull ubuntu:latest

イメージがプルされ、展開されることを示す出力が表示されるはずです。

次に、特定のリソース制限を設定したmy-limited-containerという名前のコンテナを作成します。docker runコマンドに--cpus--memoryフラグを使用します。

--cpusフラグは、コンテナが使用できる CPU リソースの量を制限します。値は CPU コア数を表す浮動小数点数です。例えば、--cpus 0.5はコンテナが最大で CPU コアの半分を使用できることを意味します。

--memoryフラグは、コンテナが使用できるメモリ量を制限します。値はバイト、キロバイト (k)、メガバイト (m)、またはギガバイト (g) で指定できます。例えば、--memory 512mはコンテナのメモリ使用量を 512 メガバイトに制限します。

この例では、sleep infinityコマンドを実行するコンテナを作成します。このコマンドはコンテナを無期限に実行し続けます。CPU 使用量を 0.5 コア、メモリを 256 メガバイトに制限します。

docker run -d --name my-limited-container --cpus 0.5 --memory 256m ubuntu:latest sleep infinity

コマンドの詳細を説明します:

  • docker run: 新しいコンテナを作成して起動するコマンド
  • -d: コンテナをバックグラウンドで実行するデタッチドモードのフラグ
  • --name my-limited-container: コンテナにmy-limited-containerという名前を割り当て
  • --cpus 0.5: コンテナの CPU 使用量を 0.5 コアに制限
  • --memory 256m: コンテナのメモリ使用量を 256 メガバイトに制限
  • ubuntu:latest: 使用する Docker イメージ (最新版の Ubuntu)
  • sleep infinity: コンテナ内で実行されるコマンド。コンテナを実行状態に保つ

コマンド実行後、Docker はコンテナ ID を出力します。

コンテナが実行中でリソース制限が適用されていることを確認するには、docker inspectコマンドを使用します。このコマンドはコンテナの詳細情報を提供します。

docker inspect my-limited-container

docker inspectの出力は大きな JSON オブジェクトです。HostConfigセクション内のCpuSharesMemoryフィールドを確認して、適用された制限を確認できます。--cpus 0.5はデフォルトでCpuShares値 512 に変換されます (1CPU=1024 シェア)。Memory値はバイト単位で表示されます。

コンテナの CPU 共有 (CPU shares) を更新する

このステップでは、docker updateコマンドを使用して実行中のコンテナの CPU 共有を更新する方法を学びます。CPU 共有は、システムに負荷がかかっている場合にコンテナが CPU サイクルにアクセスする優先度を設定する方法です。共有値が高いほど、そのコンテナは低い共有値を持つ他のコンテナと比較してより多くの CPU 時間を割り当てられます。

前のステップでは、CPU 制限 0.5 コア (512 CPU 共有に相当) のmy-limited-containerという名前のコンテナを作成しました。ここでは、その CPU 共有を 768 に更新します。これにより、デフォルトの共有値 (1024) やより低い共有値を持つ他のコンテナと比較して、より高い CPU リソース優先度が与えられます。

CPU 共有を更新するには、docker updateコマンドに--cpu-sharesフラグを付け、コンテナ名と新しい共有値を指定します。

docker update --cpu-shares 768 my-limited-container

更新が成功したことを示すコンテナ名が出力として表示されるはずです。

CPU 共有が更新されたことを確認するには、再度docker inspectコマンドを使用してHostConfigセクションのCpuSharesフィールドを確認します。

docker inspect my-limited-container

出力からCpuSharesフィールドを探してください。その値は現在 768 になっているはずです。

重要な点として、CPU 共有の更新にはコンテナの再起動が必要ありません。変更は実行中のコンテナに動的に適用されます。

コンテナのメモリ制限を更新する

このステップでは、docker updateコマンドを使用して実行中のコンテナのメモリ制限を更新する方法を学びます。メモリ使用量を制限することは、コンテナが過剰な RAM を消費するのを防ぐために重要であり、ホストマシンのパフォーマンス問題やシステム不安定化を引き起こす可能性があります。

最初のステップでは、256 メガバイトルのメモリ制限を設定したmy-limited-containerを作成しました。ここでは、そのメモリ制限を 512 メガバイトに増やします。

メモリ制限を更新するには、docker updateコマンドに--memoryフラグを付け、コンテナ名と新しいメモリ制限値を指定します。

docker update --memory 512m my-limited-container

更新が成功したことを示すコンテナ名が出力として表示されるはずです。

メモリ制限が更新されたことを確認するには、docker inspectコマンドを使用してHostConfigセクションのMemoryフィールドを確認します。

docker inspect my-limited-container

出力からMemoryフィールドを探してください。その値は現在 536870912(512 メガバイトをバイト単位で表した値)になっているはずです。

CPU 共有の更新と同様に、実行中のコンテナのメモリ制限を更新する場合もコンテナの再起動は不要です。変更は動的に適用されます。

コンテナの再起動ポリシーを更新する

このステップでは、docker updateコマンドを使用してコンテナの再起動ポリシーを更新する方法を学びます。再起動ポリシーは、コンテナが終了した時や Docker デーモンが再起動した時の挙動を決定します。これはコンテナ内で動作するアプリケーションの可用性を確保するために重要です。

デフォルトでは、コンテナの再起動ポリシーはnoに設定されており、終了後に自動的に再起動しません。ここではmy-limited-containerの再起動ポリシーをon-failureに更新します。このポリシーでは、コンテナが非ゼロの終了コード(エラーを示す)で終了した場合のみ再起動します。

再起動ポリシーを更新するには、docker updateコマンドに--restartフラグを付け、コンテナ名と希望するポリシーを指定します。

docker update --restart on-failure my-limited-container

更新が成功したことを示すコンテナ名が出力として表示されるはずです。

再起動ポリシーが更新されたことを確認するには、docker inspectコマンドを使用してHostConfigセクション内のRestartPolicyフィールドを確認します。

docker inspect my-limited-container

出力からRestartPolicyフィールドを探してください。RestartPolicy内のNameフィールドがon-failureになっているはずです。

その他の一般的な再起動ポリシーには以下があります:

  • no: コンテナを自動的に再起動しません
  • on-failure[:max-retries]: コンテナが非ゼロの終了コードで終了した場合のみ再起動します(オプションで再起動試行回数を制限可能)
  • always: コンテナが停止した場合、常に再起動します
  • unless-stopped: 明示的に停止されない限り、常にコンテナを再起動します

再起動ポリシーの更新もコンテナの再起動を必要としません。変更は動的に適用されます。

最後に、作成したコンテナをクリーンアップしましょう。

docker stop my-limited-container
docker rm my-limited-container

これによりコンテナが停止・削除されます。

まとめ

この実験では、docker updateコマンドを使用して Docker コンテナのリソースを管理する方法を学びました。まず、docker runコマンドに--cpus--memoryフラグを指定して、初期の CPU とメモリ制限を設定したコンテナを作成しました。これにより、ホストマシンでのリソース不足を防ぐために、コンテナ作成時にリソース制約を設定する方法を確認しました。

次に、実行中のコンテナに対してこれらのリソース制限を動的に変更する方法を学びました。docker update --cpu-sharesでコンテナの CPU 共有を更新し、docker update --memoryでメモリ制限を調整しました。最後に、docker update --restartを使用してコンテナの再起動ポリシーを変更し、障害発生時のコンテナの挙動を制御する方法を実践しました。

これらの手順を通じて、docker updateコマンドを使用してコンテナ作成後のリソース割り当てや挙動を微調整する実践的な経験を得ることができました。