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 コード

推薦する

HTML ul および li タグを使用して画像を表示するサンプル コード

以下のコードをDreamweaverのコードエリアにコピーすると、プレビュー時に以下の画像が表示され...

Ubuntu 18.04の下のディレクトリにディスクをマウントします

導入この記事では、Ubuntu 18.04 デスクトップ システムでディスクを目的のディレクトリにマ...

jQueryは要素を追加した後に元のイベントが実行されない問題を解決します

まずエラーコードを見てみましょう。 html: <テーブルボーダー="1"...

JavaScript 関数呼び出しの典型的なサンプルコード

目次JavaScript 関数呼び出しの典型的な例JS関数の定義と呼び出し方法要約するJavaScr...

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

Linux で rc.local ファイルがない場合の完璧なソリューション

新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...

MySQL のデッドロック チェックとデッドロック除去の例の詳細な説明

1. クエリプロセスプロセスリストを表示2. 対応するプロセスを照会し、IDを強制終了します。検証(...

バランスの取れたデジタルスクロール効果を実現するJavaScript

目次1. 実施の背景2. 実装のアイデア3. 実施プロセス1. 実施の背景先週、ユーザーがタスクを完...

MySQL 8.0.25 解凍版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25解凍版のインストールチュートリアル、参考までに具体的な内容は以下のとおりです...

docker version es、milvus、minio 起動コマンドの詳細な説明

1. es起動コマンド: docker run -itd -e TAKE_FILE_OWNERSHI...

MySQL マスタースレーブ同期遅延の原因と解決策

歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...

Linux環境にDocker環境をインストールする(落とし穴なし)

目次インストールの前提条件ステップ1: システムの残りを確認してクリアし、Dockerの依存関係をイ...

MySQL5.7 シングルインスタンス自動起動サービスの設定プロセス

1.MySQLのバージョン [root@clq システム]# mysql -v MySQL モニター...

VueはEchartsを使用して3次元棒グラフを実装します

この記事では、Echartsを使用して3次元棒グラフを実装するVueの具体的なコードを参考までに共有...

RHEL8 /CentOS8 でマルチノード Elastic Stack クラスターを構築する方法

一般的に ELK スタックとして知られる Elastic スタックは、Elasticsearch、L...