Dockerカーネル技術の原則: 名前空間のマウント

Dockerカーネル技術の原則: 名前空間のマウント

[[411078]]

前回の記事では、UTS 名前空間について紹介しました。コンテナ内の各コンテナは個別にマウントおよび保存できるため、マウントの分離が必要です。マウント名前空間は Linux でサポートされている最も古い名前空間であり、異なる名前空間で異なるマウント ビューをサポートします。

unshare を通じて新しいマウント スペースを分離し、この新しいマウント スペースの /mnt ディレクトリに /usr/bin ディレクトリをマウントすることができます。 exit が返されると、マウントは無効になります。下記の通りです。

  1. # 共有解除--mount  
  2. # マウント--bind /usr/bin/ /mnt/  
  3. # ls /mnt/cp
  4. /mnt/cp
  5. # 出口
  6. # ls /mnt/cp
  7. ls: '/mnt/cp'にアクセスできません: そのようなファイルまたはディレクトリはありません

実際、unshare --mount の本質は、クローン作成時にフラグを CLONE_NEWNS として指定することです。以降のデモの原理も同様です。

カーネル原理

マウント名前空間を理解するには、まずマウントの原理を理解する必要があります。マウントは、ファイル システムを別のファイル システムにマウントできます。次の図は、ルート ファイル システムの「/home」パスにマウントされたファイル システムを示しています。マウント関係はカーネル構造マウントによって識別されます。マウント構造の中核は、マウントされたターゲット パスを指す mnt_mountpoint です。これは、図のルート ファイル システムの /home パスです。

上図では、home に 2 つの dentry があります。1 つはターゲット マウント ポイントであるルート ファイル システムの dentry で、もう 1 つはマウントされたファイル システムの dentry です。たとえば、マウント ディスクが EXT4 ファイル システム形式の場合、この dentry はマウント ディスクのルート ファイル システム dentry になります。外部ファイル システムは、マウント構造体を介してルート ファイル システムにマウントできます。

各マウント構造体には、マウント コマンド スペースへのポインターである mnt_namespace が含まれています。前回のネームスペースの概要記事で紹介した ns_proxy も、この mnt_namespace を指します。このようにして、プロセスとそのマウント スペースを関連付けることができます。

マウント名前空間のもう 1 つの特別な機能は、マウント伝播です。これは、1 つのマウント オブジェクトの状態の変化によって他のマウント オブジェクトがマウントおよびアンマウントされるイベントを指します。コンテナのシナリオでは、Docker でマウントが実行された場合、そのマウントはホスト上で確認できますか?逆に、ホスト上でマウントを実行した場合、コンテナ内でそれを見ることはできますか?一般的な取り付け方法は 3 つあります。

共有関係: 2 つのマウント オブジェクトに共有関係がある場合、一方のマウント オブジェクトのマウント イベントはもう一方のマウント オブジェクトに伝播され、その逆も同様です。これは、コンテナとホストのマウントが相互に表示されることを意味します。

スレーブ関係: 2 つのマウント オブジェクトがスレーブ関係を形成する場合、一方のマウント オブジェクトのマウント イベントはもう一方のマウント オブジェクトに伝播されますが、その逆は当てはまりません。この関係では、スレーブ オブジェクトがイベントの受信者になります。つまり、ホストにマウントされたコンテナーは表示されますが、その逆は表示されません。

プライベートな関係は相互に通信せず、独立しています。つまり、お互いに見えません。

実戦デモ

上記のプログラムに CLONE_NEWNS を追加すると、新しいマウント名前空間が作成されます。コードは以前の PID コードと CLONE_NEWNS に基づいています。

  1. パッケージメイン
  2. 輸入 (
  3. 「fmt」  
  4. 「オス」  
  5. 「OS/実行」  
  6. 「システムコール」  
  7. 関数main() {
  8. cmd := exec .コマンド( "/bin/sh" )
  9.  
  10. cmd.Stdin = os.Stdin
  11. cmd.Stdout = os.Stdout
  12. cmd.Stderr = os.Stderr
  13.  
  14. cmd.Env = []文字列{ "PS1=-[ns-process]- # " }
  15.  
  16. cmd.SysProcAttr = &syscall.SysProcAttr{
  17. クローンフラグ: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID |システムコール.CLONE_NEWNS、
  18. }
  19.  
  20. エラーの場合:= cmd.Run();エラー != ゼロ {
  21. fmt.Printf( "/bin/sh コマンドの実行中にエラーが発生しました - %s\n" , err)
  22. os.終了(1)
  23. }
  24. }

go run を直接実行した後、記事の冒頭にあるデモ unshared を実行します。あなたは見つけるでしょう

[[411079]]

マウント伝播はデフォルトで共有されるため、新しいマウント名前空間でマウントを実行すると、ホストにも伝播されます。まず、ルート ディレクトリをホスト上のプライベート マウントに調整して、コンテナー内のマウントがホストに伝播されないようにします。

  1. # マウント--make-rprivate /  

上記のデモも正常に実行できます。

<<:  面接で必ず聞かれるJVMランタイムデータ領域について理解していますか?

>>:  エッジコンピューティングがモノのインターネットを推進

推薦する

メッセージ: Ramnode - 128MBのメモリを搭載したVPSの販売を再開

4月初旬、Ramnodeは128Mメモリ搭載VPSの販売を停止すると発表しました。「ニュース:Ram...

ramnode-VPS 6.8% オフ プロモーション、第 1 波は 9 月

Ramnode は 9 月の 32% 割引コードをリリースします。割引コード: WOWNUM1、今か...

クラウドコンピューティング時代:クラウド運用・保守の落とし穴を科学的に回避する経験のまとめ

インターネットの急速な発展に伴い、最先端技術を駆使するテクノロジー企業がインターネットに目を向けてい...

2020年、インターネットセレブをどうやって作るのか?

今年最初のインターネット有名人ゴシップの波は「それほど有害ではないが、非常に侮辱的」だった。まず、1...

アリババクラウドがクラウドコンピュータ「Shadowless」をリリース:クラウドで成長する「スーパーコンピュータ」

登場から40年近く経ったパーソナルコンピュータは、大きな進化を遂げてきました。 9月17日、2020...

Canalysの最新レポートによると、2020年の世界のクラウドインフラサービス支出は合計1,420億ドルになる見通し

Canalysのレポートによると、主要なクラウドサービスプロバイダーとテクノロジーチャネルが顧客投資...

FinOpsクラウドコスト最適化は無視できない

調査会社ガートナーの調査によると、2022年末までに世界中の企業がクラウドコンピューティングインフラ...

ウェブサイトのSEO中に遭遇する一般的な問題と解決策の簡単な分析

プロの SEO 担当者として、私たちは毎日ウェブサイトを扱っています。もちろん、ウェブサイトの重み、...

健全なウェブサイト内部リンク構造を構築する方法

百度は6月22日と28日に公式声明を発表し、低品質サイトへの取り締まりの厳しさを厳粛に強調し、独自の...

IBM Cloud Paks が中国で正式に開始: Digital China と提携して、企業がクラウド変革の「第 2 章」に突入できるよう支援

11月5日、IBM中国はIBMのソフトウェアポートフォリオをクラウドネイティブに変換し、Red Ha...

調査によると、テストされたServiceNowインスタンスの約70%がデータを漏洩していることが判明

SaaS セキュリティ プロバイダーの AppOmni は、誤った構成は、顧客が管理する構成とゲスト...

医療業界における男性科病院の最適化戦略の分析

先日、8月25日のBaiduのアルゴリズム調整について記事を書きました。もう10日近く経ちました。こ...

鉄道省の12306ウェブサイトに誤りがあります:到着時刻が出発時刻より早いです

鉄道部の12306ウェブサイトはひどいミスを犯し、到着時間が出発時間よりも早く表示されました。中国江...

ウェブマスター向け情報サイトが復活しつつあるが、草の根ウェブマスターは持ちこたえなければならない

ウェブマスター業界の台頭に伴い、その派生品も多くの草の根ウェブマスターに歓迎されてきました。SEOト...

訪問者の力を活用してサイトをより便利にする方法を学びましょう

ほとんどの草の根ウェブマスターにとって、日々の最適化作業は基本的に自分自身で行っています。コンテンツ...