【Linux】コンテナとプロセスの関係を調べてみたので書いておくことにするよ【lxd】

投稿者: | 2019-02-24

はじめに

以下の構成やファイルについて調べているうちに、linuxカーネルやlinuxで動いているプロセスについて興味を持ちました。
また、以前より気になっていたlxcによるコンテナのプロセスがどのような仕組みで動いているのかを調べてみたので書いておきます。

そもそもプロセスがよくわかっていない

以前よりコンテナとしてlxcのgo言語バインディングであるlxdを使っています。
環境が簡単に作れて壊せるのでちょっとしたミドルウェアを試してみたりするのに適していて愛用していました。
しかし、一体どのような仕組みで動いているのかわからん、という状態だったわけです。

google先生に聞いてみると、いい記事を紹介してくれました。
第2回 コンテナの仕組みとLinuxカーネルのコンテナ機能[1]名前空間とは?

なるほど。
つまりはlxcによるコンテナ仮想化技術により、namaspaceという機能により
・マウント名前空間
・UTS名前空間
・PID名前空間
・IPC名前空間
・ユーザ名前空間
・ネットワーク名前空間
をコンテナ毎に独立して使えるようにしているようです。

一番わかりやすい例として、PID名前空間がホスト側とコンテナ側でどのように見えるのか実験してみました。

はーん。ホストOS側から見るとコンテナ内のsystemdはlxdプロセスの子プロセスとして存在していますね。
このnamaspaceがあるおかげでPIDがコンテナ内で独立してもてるようになっている。
だからコンテナ側から見たときはsystemdの親プロセスが1になっているのか。

1コンテナを起動する = 1プロセスを起動する(正確にはsystemdの親プロセスができて、その子プロセスとして複数のプロセスが走る)
コンテナの起動や停止がはやいのはただ、プロセスを起動したり停止しているだけだからということか。

基本の仕組みは理解できました(*^^*)
今日はここまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です