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

推薦する

Dockerでの接続例外中のエラーを解決する

Docker を初めて使い始めると、通常とは異なる問題に遭遇して、必然的に混乱してしまいます。大丈夫...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル MySQL 8.0 の新しいパスワード認証方法

この記事では、参考までにMySQL8.0.11のインストールと設定方法、およびMySQL8.0の新し...

MySql テーブル、データベース、シャーディング、パーティショニングの知識ポイントの紹介

1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...

MySQL並列レプリケーションの簡単な説明

1. 並列レプリケーションの背景まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. ...

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...

Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

Ubuntu 20.04はnetplanを通じてネットワークを管理するため、以前のバージョンとは少...

Vue で Axios 非同期リクエスト API を使用する方法

目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

優秀なウェブ開発者が開発スキルを向上させるために知っておくべき10のこと

「開発とは、単にコードを書くだけではない」というのは、3EV の Dan Frost 氏の言葉です。...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...

MacでのMySQL初期化パスワード操作

Macでデータベースを操作する際に個人が遭遇するデータベース起動の問題の簡単な記録1. Apple-...

Docker の MySQL コンテナのタイムゾーン問題の修正

序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...

Vueはファイルのアップロードとダウンロード機能を実装します

この記事では、ファイルのアップロードとダウンロード機能を実装するためのVueの具体的なコードを例とし...

継続的インテグレーションテストにおけるDocker Swarmの適用の詳細な説明

背景アジャイル モデルは広く使用されており、テストは特に重要です。新しいバージョンは頻繁にリリースす...

Linux で Redis のリモート接続を実装する方法

LinuxにRedisをインストールしたら、Javaを使って接続します。Javaコードは次のとおりで...