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

推薦する

Workbench を介して MySQL データベースにリモートでアクセスする方法の詳細な説明

序文Workbench が 1 台のコンピューターにインストールされており、別の Ubuntu サー...

エコー後に要素編集フォームel-radioが選択できない問題を解決します

目次序文質問オンラインソリューション序文この記事の内容は私がこの業界に入ったときのメモを元にしている...

Antd+vueは円形属性フォームの動的検証のアイデアを実現します

必要な項目をループして検証するために、クエリ フォームのいくつかのプロパティを実装したいと考えていま...

MySQL マルチバージョン同時実行制御 MVCC の実装

トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...

1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...

vue3 カスタムディレクティブの詳細

目次1. カスタム指示の登録1.1. グローバルカスタム指示1.2. ローカルカスタム指示2. カス...

mysql8.0.14.zip のインストール中にデータ フォルダを自動的に作成できませんでした。サービスを開始できません。

今日システムを再インストールした後、コンピューターに mysql を再インストールし、ZIP ファイ...

Vue 初心者ガイド: 最初の Vue-cli スキャフォールディング プログラムの作成

1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...

Nginx でバージョン番号を隠す方法

Nginx はバージョン番号を非表示にする実稼働環境では、セキュリティ上の脆弱性の漏洩を避けるために...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

JSの基本概念の詳細な紹介

目次1. JSの特徴1.1 マルチパラダイム1.2 説明1.3 シングルスレッド1.4 ノンブロッキ...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

つまり、フィルターコレクション

IE は開発の初期段階では頭を悩ませましたが、他のブラウザとは異なります。他のブラウザがサポートして...

dockerでpdflatex環境を設定する方法

技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...

MySqlは指定されたユーザーのデータベースビュークエリ権限を設定します

1. 新しいユーザーを作成します。 1. SQL ステートメントを実行して新しいものを作成します (...