はじめに
この記事はコンテナ初学者が中級者になる為に必要なことをまとめていく記事です。
今回はコンテナについて解説しています。
コンテナとは
コンテナと言えば、Dockerのように言われがちですが、実際にはいろんなコンテナエンジンがあります。
ここでは説明しませんが、多くの人がコンテナを使う上でDockerを使っていると思います。
そもそもの話ですが、コンテナとはなんでしょうか。
概要
コンテナはLinux上で動くプロセスをあたかも「コンテナ」のように隔離した状態で起動することです。
異なるOS上でもコンテナエンジン上であれば、ほぼ同じ環境を提供することができるようになります。
そもそもコンテナというのはプロセスコンテナと呼ばれるパッチセットから生まれており、これはLinux上のプロセスをコンテナと呼ぶ階層にグループ化する技術です。
プロセス同士が繋がり合わないようにプロセス間で壁を作るこの実装こそがコンテナと呼ばれるものです。
プロセスが「コンテナ」という実装に隠れているというイメージ
このコンテナ環境を実現する上で大事なこととしてはプロセス空間と名前空間があります。
コンテナの仕組み
プロセス空間とは別名ユーザ空間と呼ばれ、プログラムが実際に動作する空間と考えると良いでしょう。
さらにこのプロセス空間で動くソフトウェアを管理する空間を名前空間
と呼びます。
この名前空間を制御することによって複数のプロセスがLinuxカーネルを共有できるようになっています。
なお、プロセスが使うリソースを制限するにはcgroup
を利用します。
名前空間でプロセスの制御、cgroupでプロセス毎のリソース制限を設定できます。
コンテナが動く環境
ここまででコンテナの概要を見てきましたが、ではコンテナはどのような環境で動作するのでしょうか。
結論から述べるとコンテナが動く環境はLinuxです。「あれ、じゃあなんでMacOSやWindowsで動くの?」
とそう思われる方がいるかもしれません。
簡単に言えば、各OS上で何かしらのLinuxカーネルを参照しています。
Linuxカーネルを動かしてその上でコンテナを起動しています。
OS上で動いているように見えて実は全てはLinuxの上でしたという感じです。
結局はすべて、Linux上で動いているということ
まとめ
今回の内容がコンテナをもっと知る機会になりましたら幸いです。
次はコンテナのセキュリティやDockerfileに関するベストプラクティスを振り返りたいですね、