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 形式のフィールドをクエリする詳細な説明

推薦する

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...

MySQL 5.7 と Mac 上の MySql の詳細なインストール図をダウンロードする

1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...

MySql における特殊演算子の使用の概要

序文MySQL には次の 4 種類の演算子があります。算術演算子比較演算子論理演算子ビット演算子これ...

Dockerをクリーンアンインストールする方法の詳細な説明

まず、サーバー環境情報: アンインストールの理由:しばらくするとホストマシンのディスクが100%にな...

js の Array.forEach でループを終了する方法の例

目次forEach() メソッドjs の Array.forEach のループから抜け出す方法解決:...

ファイルをアップロードするための HTML フォームの「参照」ボタンを変更する方法

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明

目次1. はじめに2. 使用1. vue2とvue3の違い2. ページ上の一部のデータはキャッシュす...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...

Linuxはシェルスクリプトを使用して履歴ログファイルを定期的に削除します

1. ツールディレクトリのファイル構造 [root@www tools]# ツリーツール/ ツール/...

MySQLの重複排除方法

MySQLの重複排除方法【初級】繰り返しのセリフが少ないdistinctive を使用してそれらを見...

HTML で js を使用してローカル システム時間を取得する

コードをコピーコードは次のとおりです。 <div id="名前"> ...

高速レイアウトのための CSS ビューポート単位

CSS ビューポート ユニットはここ数年登場しており、時が経つにつれて、ますます多くの開発者が使用し...

Viteの新しい体験の詳細な説明

Vite とは何ですか? (フロントエンドの新しいおもちゃです) Vite は、ネイティブ ES モ...

HTML で余分なテキストを省略記号に変換する方法

HTML で余分なテキストを省略記号として表示したい場合は、いくつかの方法があります。 1行テキスト...