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

推薦する

mysql5.7.17 zip の解凍とインストールの詳細な手順

1. ダウンロードアドレスhttps://dev.mysql.com/downloads/mysql...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

JavaScript で円形のプログレスバー効果を実装する

この記事では、円形のプログレスバー効果を実現するためのJavaScriptの具体的なコードを参考まで...

MySQL の general_log ログの知識ポイントの紹介

以下の操作デモンストレーションはすべて MySQL バージョン 5.6.36 に基づいています。仕事...

TypeScript における型保護の詳細な説明

目次概要型アサーション構文ではインスタンスオブ構文typeof構文要約する概要TypeScript ...

MySQL 5.7.33 インストール プロセスの詳細な図解

目次インストールパッケージのダウンロードインストール環境変数の設定インストールが成功したか確認する記...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

MySQL 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

PC/Pad/Phoneデバイスに自動的に適応するCSSウェブページレスポンシブレイアウト

序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...

写真をアップロードして顔を認識する Vue+axios サンプルコード

目次Axios リクエストQs処理データ分析Vantアップロードファイル形式完全なコードこの記事では...

Facebook によるインターネット サービスのほぼ完璧な再設計

<br />出典: http://www.a-xuan.cn/?p=197 先ほどFac...

Nginx ドメイン転送の使用シナリオ コード例

シナリオ 1: サーバーの制限により、外部に開かれているポートは 1 つだけですが、別の外部ネットワ...

CSSをインポートする方法に関する詳細な洞察の要約

CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...