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

推薦する

データベース復旧エラーの原因となる MySQL 文字セットの簡単な分析

MySQL の文字セットエンコーディングが正しくないデータをインポートすると、エラーが表示されます。...

jar パッケージを Docker コンテナに変換する方法

jar パッケージを Docker コンテナに変換する方法1.まずJavaイメージをダウンロードする...

Docker ビルド kubectl イメージ実装手順

プログラムサービスがgitlab ci/cdと統合されたk8sを使用してデプロイされている場合、gi...

Xshell を使用して VMware 上の Linux 仮想マシンに接続する (グラフィック手順)

はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...

ルートパスワードを変更するための MySQL 設定、MySQL サーバー接続、MySQL 共通コマンド図

1. ルートパスワードの設定と変更mysql が起動しているかどうかを確認します。起動していない場合...

Dockerfile における ENTRYPOINT と CMD の違い

Docker システムの学習チュートリアルでは、Dockerfile を使用して Docker イメ...

elasticsearchを使用してインデックスデータを定期的に削除する

1. ESを使うこともあるリソースが限られている、またはビジネス上のニーズにより、最新の期間のデータ...

JavaScript の高度なクロージャの説明

目次1. 閉鎖の概念追加の知識ポイント: 2. 閉鎖の役割: 3. 閉鎖例3.1 liをクリックする...

Nginx ローカル ディレクトリ マッピング実装コード例

他のデバイスの画像をローカルディレクトリにマウントするなど、サーバー上の静的リソースにアクセスする必...

momentJs を使用してカウントダウン コンポーネントを作成する (サンプル コード)

今日はvueとmomentで作ったカウントダウンを紹介したいと思います。具体的な内容は以下のとおりで...

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

CSS3 弾性拡張ボックスの詳細な説明

使用フレキシブル ボックスはフロントエンドの Web ページ レイアウトで重要な役割を果たしますが、...

MySQL実行計画の詳細な説明

EXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情報を提供します...