Docker基盤技術の適用に関する詳細な説明 名前空間Cgroup

Docker基盤技術の適用に関する詳細な説明 名前空間Cgroup

Docker の基盤技術:

Docker の基盤となる 2 つのコア テクノロジーは、名前空間とコントロール グループです。

名前空間: コンテナ仮想化のコア技術であり、コンテナを分離し、コンテナ間の競合を解決するために使用されます。

これは主に次の 6 つの分離技術によって実現されます。
疑似ファイルシステムには、/proc と /sys/ の 2 つがあります。

  • UTS: 各コンテナに独立したホスト名とドメイン名を持たせることができるため、コンテナはホスト上のプロセスではなく、ネットワーク上の独立したノードとしてみなすことができます。
  • IPC: コンテナ内のプロセス相互作用では、共通セマフォ、メッセージ キュー、共有メモリなど、Linux の一般的なプロセス間相互作用方式が引き続き採用されています。コンテナ プロセス間の相互作用は、実際にはホスト上の同じ PID を持つプロセス間の相互作用です。
  • PID: 異なるユーザーのプロセスは pid 名前空間によって分離され、同じ pid が異なる名前空間に存在することができます。 docker 内のすべての LXC (Linux コンテナ) プロセスの親プロセスは docker プロセスであり、各 LXC プロセスには異なる名前空間があります。
  • NET: 異なるユーザーのプロセスは pidnamespace によって分離され、同じ pid が異なる名前空間に存在する可能性があります。 docker 内のすべての LXC プロセスの親プロセスは docker プロセスであり、各 lxc プロセスには異なる名前空間があります。
  • MNT: ファイル システムのマウント ポイント。
  • USRE: 各コンテナは異なるユーザーとグループ ID を持つことができます。つまり、ホスト上のユーザーではなく、コンテナ内のユーザーを使用してプログラムを実行できます。

これら 6 つの項目が分離されている限り、他のシステム リソースが共有されている場合でも、コンピューターはそれらを 2 つの異なるシステムにあると見なします。

cgroup (プログラムのリソース使用量を制御する)

cgroup を実装する主な目的は、さまざまなユーザー レベルでのリソース管理のための統一されたインターフェイスを提供することです。単一プロセスのリソース制御からオペレーティング システム レベルでの仮想化まで。

cgroup の役割:

1) リソース制限: cgroup はプロセス グループが使用するリソースの合計量を制限できます。
2) 優先度の割り当て: 割り当てられる CPU タイムスライスの数とディスク IO 帯域幅は、実際にはプロセス操作の優先度を制御することと同じです。
3) リソース統計: cgroup はシステム リソースの使用状況をカウントできます。 CPU使用時間、メモリ使用量など。
従量課金制でご利用いただけます。
4) プロセス制御: プロセス グループに対して一時停止、再開、その他の操作を実行できます。

cgroup の適用:

1) メモリとスワップパーティションの制限:

コンテナは物理メモリとスワップの2つの部分から構成されます。

Docker では、パラメータを使用してコンテナ メモリの使用量を制御できます。

-m または --memory: メモリ使用量の制限を設定する

--memory-swap: スワップ(スワップパーティション)の使用制限を設定します

// CentOS イメージに基づくと、メモリ制限は 200M で、スワップ パーティションのメモリは 300M です。

[root@sqm-docker01 ~]# docker run -it -m 200M --memory-swap 300M centos

制限されたメモリを表示するには、コンテナーに入ります。

[root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
209715200 #バイト数を表示 [root@05a0be7b870a /]# cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes 
314572800

2) コンテナのCPU制限:

コンテナ実験の CPU 重みを設定するには、-c または --cpu-shares を使用します。設定されていない場合、デフォルトは 1024 です。

// CentOS イメージに基づいて、CPU の重み制限が 512 の containerB という名前のコンテナを実行します。
[root@sqm-docker01 ~]# docker run -it --name containerB -c 512 centos
[root@b2cf9f28ce1d /]# cat /sys/fs/cgroup/cpu/cpu.shares 
512

3) コンテナのブロック io (ディスクの読み取りと書き込み) を制限します。

bps: 1 秒あたりに読み書きされるデータの量。バイト/秒
iops: 1 秒あたりの io 操作の数。 io/秒

--device-read-bps: 読み取りデバイスのbpsを設定します
--device-write-bps: デバイスへの書き込みのbpsを設定します

--device-read-iops: 読み取りデバイスの iops を設定する
--device-write-iops: デバイスへの書き込みの iops を設定します

//testA という名前のコンテナを作成し、1 秒あたりのディスク書き込み量を 30 MB に制限します。
[root@sqm-docker01 ~]# docker run -it --name testA --device-write-bps /dev/sda:30MB centos

テスト用のデータを書き込みます:

パラメータの説明:
infile=/dev/zeroから抽出
outfile=名前をカスタマイズする
bs=1M ファイルサイズは1Mです
count=800 は合計 800 回書き込むことを意味します。
oflag=direct: --device-write-bps が有効になるように、ファイルを書き込むためのディレクトリ IO モードを指定するために使用されます。

1秒あたりの書き込み量は80Mで、約26秒かかることがわかります。

通常ディスクに書き込む場合:

以上が今回ご紹介したDocker基盤技術に関するナレッジポイントの全てです。123WORDPRESS.COMをご活用いただき、誠にありがとうございました。

以下もご興味があるかもしれません:
  • Dockerの核となる原則であるCgroupの詳細な説明
  • docker cgroupリソース監視の詳細な説明
  • cgroups を使用して Docker コンテナのリソース使用量を制限する方法の詳細な説明
  • この記事は、Dockerにおけるcgroupの具体的な使用法を徹底的に理解するのに役立ちます。

<<:  JavaScriptエンジンV8の実行プロセスの詳細な説明

>>:  シーケンス関数を実装する MySQL コード

推薦する

Vue2.0/3.0双方向データバインディングの実装原理の詳細説明

Vue2.0/3.0双方向データバインディングの実装原理双方向データバインディングとは、データの変更...

マウスの尾行効果を実現する JavaScript

マウス効果では、setTimeout を使用して固定時間にノードを生成し、ノードを削除し、生成された...

JavaScript 文字列オブジェクトメソッド

目次文字列オブジェクトのメソッド方法 1: indexOf() (推奨)方法 2: search()...

Intelli Idea で Tomcat 設定が見つからない問題の解決方法

2日前に新しい会社に入社しました。その会社ではIntelli Ideaを使っています。Eclipse...

React+Koa によるファイルアップロードの実装例

目次背景サーバーの依存関係バックエンド構成クロスドメインバックエンド構成の静的リソースアクセスではk...

Vueデータ変更検出の基本的な実装の簡単な分析

目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...

overflow:hidden の役割の詳細な説明 (オーバーフローの非表示、フロートのクリア、マージンの崩壊の解決)

1. オーバーフロー:非表示 オーバーフロー非表示要素に overflow:hidden が設定さ...

MySQLフィールドのデフォルト値を設定する方法

目次序文: 1. デフォルト値に関する操作2. 使用上の提案要約:序文: MySQL では、テーブル...

よくあるNginxの設定ミスの例

目次ルートの場所が見つかりませんオフバイスラッシュ安全でない変数の使用スクリプト名$uri を使用す...

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...

MySQLプリコンパイル機能の詳細な説明

この記事では、MySQLのプリコンパイル機能について紹介します。具体的な内容は以下のとおりです。 1...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

Vue スキャフォールディング プロジェクトを作成するための詳細な手順

vue スキャフォールディング -> vue.cli大規模で完全に機能する Vue プロジェク...

HTML テーブルタグチュートリアル (7): 背景色属性 BGCOLOR

テーブルの背景色は、BGCOLOR 属性を通じて設定できます。基本的な構文<テーブル BGCO...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...