古くからのBSDな友達KとのDockerに対する対話
最近、20年以上前からのBSD友達KとDockerについて対話したので、その時の話をご紹介します。
以下、(K)は友人、(M)はむとう。
はじめに
(M)とりあえず、これ読め。
仮想化の方式
仮想マシン(Virtual Machine:VM)
ハードウエアごと仮想化する(完全にコンピュータをエミュレーションする)。
オーバヘッドが大きい。
コンテナ型仮想化
OS(kernel)上のファイルシステム、プロセス、ユーザなどのみ仮想化(名前空間の分離)する。
kernelは共有しているため、コンテナホストkernelと同じkernelで使えるものしか動かない。
オーバヘッドが小さい。
VMによる仮想化の例
FreeBSD bhyve
macOS: Hypervisor.framework
Windows: Hyper-V
VirtualBox: FreeBSD用、macOS用、Windows用、Linux用などに対応
qemu: 完全にソフトウエアによるエミュレーションのため、遅い
コンテナ仮想化の例
FreeBSD jail
Linux Docker
Solaris zone
OpenVZ
LXC
で、Docker
Linuxのコンテナ型仮想化技術
あくまで、Linux kernel上で動くコンテナ。
macOSやWindowsで動いているのは、VM上でLinux kernelを動かしている。
macOS: Hyperkit (Hypervisor.framework)
Windos: Hyper-V + Windows/Linuxコンテナ
ツールとしての使いやすさ(jail pullとかあれば…)
デファクトスタンダードになったことの優位性
エコシステムの完成
Docker hubでのコンテナイメージ共有とそのイメージの流用の容易性。
Q&A
Q(K):「Docker ホスト= Linux のみ」,「Docker = Linux のみ」ですかぁ…結局 Linux でのみ動作するアプリケーションを動かしたい人だけに限られるのでは?
A1(M): いや、VM使って、macOSでもWindowsでもホストできますがな。
A2(M)
macOS, Linux, Windowsの3大プラットフォームだけで提供されてるソフト多いのでそれでいいじゃん。
サーバで使うhttpdとかはLinux用のもので十分じゃ…
GPU使うとなると、Linuxが一択のような気もするぞ。