概要(簡単にまとめ)
- DockerはDocker Engineのある環境で動く
- 実行環境をコンテナという単位で管理し、それぞれは隔離されている。
- コンテナはイメージというものから作成されて、そのイメージとやらはDockerHubというリポジトリから取得できる
- コンテナにはOSなどがなくオーバーヘッドが少ない(VirtualBoxなんかは仮想化された環境ごとにOSが存在する)
疑問
dockerイメージにはLinuxディストリビューションが配布されている
= dockerのコンテナ上にはOSができる場合もあるのではないか。
別の言い方をすれば、ホストOSと違うOSベースのコンテナイメージが
何故Docker上で動くのか
答え
Linuxカーネルには互換性があり、その範囲内であれば
異なるカーネル上でも同じ実装でアプリケーションは動作できるから
- コンテナはホストOSのカーネルに対して、ABIというインターフェースを介してシステムコールを行っている
- Linux系と呼ばれるOS群にはRHEL、CentOS、Ubuntuとかたくさんあるけど、これらは基本的に共通のカーネルを使用している。
- Linuxカーネルにもバージョンが存在するが、古いバージョンであってもABIに対しては同じ仕様で呼び出すことができる。
=> つまり、コンテナ内に存在しているのはアプリケーションの実行に必要なライブラリや特定のディストリビューション上でのファイルシステムである、ということが言える。
あれ、でもそれってLinux OSだった場合の話でWindows/Macの場合は話が違うよね?
【答え】 Docker for Macなどのソフトをインストールして代替。
- Macに関してはHyperkitという仮想化ツールでdockerホストとなるVMを作ることで対応しているらしい。つまり、MacOSにABIを被せているわけではなく、LinuxOSを別個に立てて、そこでよしなにやってくれるらしい
- windowsの細かいことは分からないです。ただ、Macと同様の仕組みがあるらしい。
参考
https://qiita.com/kirikunix/items/33414240b4cacee362da
https://thinkit.co.jp/article/17301
最後に
間違ったこと書いてたらツッコミくれると助かります。