Dockerを使用してコンテナリソースを制限する方法

Dockerを使用してコンテナリソースを制限する方法

覗き見の問題

サーバーでは、IIS サービスが複数のサイトを展開していると仮定すると、サイトの 1 つに問題 (CPU が 100% になったり、メモリがいっぱいになったりするなど) が発生すると、このサーバーの他のサイトもクラッシュします。同様に、コンテナを使用する場合、単一のホスト上で数十のコンテナが実行される場合があります。コンテナは互いに分離されていますが、ホストと同じカーネル、CPU、メモリ、ディスク、その他のハードウェア リソースを使用します。コンテナ リソースが制限されていない場合、コンテナは互いに影響を及ぼします。

解決

Docker は、メモリ、CPU、またはディスク IO を制限する方法を提供しており、これにより、コンテナが占有するハードウェア リソースのサイズと量を制限できます。docker create を使用してコンテナを作成するか、docker run を使用してコンテナを実行するときに、このコンテナのハードウェア リソースを制限できます。

メモリ制限

Docker が提供するメモリ制限機能は次のとおりです。

1. コンテナが使用できるメモリとスワップ パーティションのサイズ。

2. コンテナのコアメモリサイズ。

3. コンテナ仮想メモリのスワッピング動作。

4. コンテナ メモリのソフト制限。

5. メモリを過剰に占有するコンテナを強制終了するかどうか。

6. コンテナの強制終了の優先度

-m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g のいずれかです。最低4M
--memory-swap メモリの合計制限 + スワップ パーティション サイズ。上記と同じ形式です。必須 -m はメモリのソフト制限を設定します。上記と同じ形式 --oom-kill-disable OOM キラーがコンテナを強制終了するのを防ぐかどうか。デフォルトでは設定されていません --oom-score-adj OOM キラーによって強制終了されるコンテナの優先度。範囲は [-1000, 1000]、デフォルトは 0 です
--memory-swappiness は、コンテナの仮想メモリ制御動作を設定するために使用されます。値は 0 から 100 までの整数です。 --kernel-memory カーネル メモリの制限。上記と同じ形式、最小サイズは4M

ユーザー メモリ制限は、コンテナーが使用できるメモリとスワップ パーティションのサイズを制限します。
これを使用する際に従うべき 2 つの直感的なルールがあります。

-m、--memory オプションの最小パラメータは 4M です。
--memory-swap はスワップ パーティションではなく、メモリとスワップ パーティションの合計サイズであるため、--memory-swap は -m、--memory よりも大きくする必要があります。

CPU 制限

docker run コマンドと CPU 制限に関連するすべてのオプションは次のとおりです。

--cpuset-cpus="" 使用できるCPUのセット。値は0~3、0、1です。
-c, --cpu-shares=0 CPUシェアの重み(相対重み)
cpu-period=0 は CPU CFS 期間を 100 ミリ秒から 1 秒の範囲で制限します (つまり [1000, 1000000])。
--cpu-quota=0 CPU CFS クォータを制限します。1ms 以上、つまり >= 1000 である必要があります。
--cpuset-mems="" メモリノード (MEM) での実行を許可します。NUMA システムでのみ有効です。

--cpuset-cpus は、コンテナが使用できる vCPU コアを設定するために使用されます。 -c、--cpu-shares は、複数のコンテナが CPU を競合する場合に、各コンテナに割り当てることができる CPU 時間の相対的な割合を設定するために使用されます。 --cpu-period と --cpu-quata は、コンテナが使用できる CPU 時間の絶対量を設定するために使用されます。

これで、docker を使用してコンテナ リソースを制限する方法についての説明は終了です。docker コンテナ リソース制限の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装
  • Dockerコンテナのネットワーク管理とネットワーク分離の実装
  • Dockerコンテナでユーザーを分離する方法
  • Docker Docker の保存場所を変更する コンテナイメージのサイズ制限を変更する操作
  • Docker CPU 制限の実装
  • Docker がコンテナに利用可能な CPU を制限する方法
  • Docker でコンテナに使用できるメモリを制限する方法
  • Docker の分離と制限の原則の紹介

<<:  HTML tbody の使用

>>:  MySQL で JSON 形式のフィールドをクエリする詳細な説明

推薦する

jsプロキシの原理の詳細な説明

目次プロキシモードとは何ですか?実例を紹介例を使ってプロキシモデルの定義を理解するプロキシとはget...

CSS ボックスの折りたたみに対する 5 つの解決策

まず、ボックスコラプスとは何でしょうか?親ボックスの内側にあるべき要素が外側にあります。第二に、箱は...

Mysqlツリー再帰クエリの実装方法

序文部門テーブルなどのデータベース内のツリー構造データの場合、部門のすべての従属部門または部門のすべ...

Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

複数の Docker コンテナがデプロイされたサーバーがあり、各 Docker コンテナが stde...

MySQL 8.0 でリモートアクセス権限を設定する方法

前回の記事では、MySQL パスワードをリセットする方法を説明しました。一部の学生から、データベース...

Vue3 における computed の新しい使用例のまとめ

vue3 での computed の使い方。vue3 は vue2 のオプション API と互換性が...

Nginx ログ管理の概要

Nginx ログの説明アクセス ログを通じて、ユーザーの地理的起源、ジャンプ元、使用端末、特定の U...

HTML の著作権記号のフォント選択問題 (著作権記号をより美しくする方法)

1. 問題を発見する&copy; は HTML の著作権記号ですが、間違ったフォントを選択す...

MySQL Community Server 5.7.16 のグリーン バージョンをインストールしてリモート ログインを実装する方法

1. MySQL Community Server 5.7.16をダウンロードしてインストールします...

WeChatアプレット開発の章:落とし穴の記録

最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

htmlハイパーリンクaのクリックイベントの後、hrefで指定されたアドレスにジャンプします。

場合によっては、ジャンプを完了するために href の代わりにハイパーリンク <a> を...

Web面接におけるJS事前解析と変数プロモーションの違い

目次事前分析とは何ですか?変数と関数の準備の違いvar 変数の繰り返し宣言変数と関数の昇格の優先順位...

CentOS 8 に Docker をインストールする詳細なチュートリアル

1. 以前のバージョン yum 削除 docker docker-client docker-cli...