Docker 2019年
4年くらい前にガッツリ構築を担当したDocker。最近はAWSやAzure案件が中心でコンテナから離れていたのですが、久しぶりにいろいろややこしくなっているDockerについて整理してみました。
※Windows周辺のサービス名称は適当です。全体の流れがわかればと言うことで概要です。
※2019年12月末に少し更新しました。
Docker の流れ
Dockerのリリースから最近までの大きな流れ
[1] Linux で Docker がリリースされる 2013
[2] Docker FreeBSD版 がリリースされる 2016
[3] Docker for Windows がリリースされる 2016
[4] Docker for Mac がリリースされる 2016
[5] Windows Server 2016 が Docker を正式サポート 2016
[6] Ubuntu on WSL (Windows Subsystem for Linux) で Dockerが動作 2018
[7] Solaris が Docker をサポート予定
[8] Docker on WSL2
Docker の分類
[1] Docker
Linuxネイティブの元祖Docker
Linux kernelを利用したオリジナルのDocker
Linuxコンテナ機能を提供
[2] Docker (FreeBSD)
FreeBSD上で動作するDocker
FreeBSDのLinuxバイナリ互換機能を利用して、Linuxコンテナ機能を提供
FreeBSDで実行されたLinuxプロセスがコンテナとして隔離され実行される
Linuxバイナリ互換機能有効化とファイルシステムとしてZFSの利用が必須
提供されているDockerのバージョンは古め。
[3] Docker for Windows
Windows上で動作するDocker
Linuxエミュレーション
Linuxの仮想マシンが動作し、Linux kernelと共にLinuxコンテナ機能を提供
Windowsの文字コードやOSの仕様に引っ張られ、\(バックスラッシュ)、半角スペース前後などの文字に関連した固有のエラーが昔はよく出た(今も?)ので注意が必要。
[4] Docker for MacOSX
MacOSX上で動作するDocker
Linuxエミュレーション
Linuxの仮想マシンが動作し、Linux kernelと共にLinuxコンテナ機能を提供
[5] Docker Container Service (Windows Server 2016)
Windowsネイティブ
Windows向けに作られたDocker。LinuxコンテナをWindows上で動作させるのではなく、WindowsのプロセスをDockerコンテナとして提供するサービス。動作するのはWindowsコンテナ。つまり、IISのコンテナなどを作成し、稼働させることができる。
[6] Docker on Ubuntu on Windows (Windows Subsystem for Linux)
Linuxネイティブ
WindowsOS上でLinuxコンテナ機能を提供。Windows Subsystem for LinuxがプロセスをLinuxのシステムコールをリアルタイムでNTカーネルのシステムコールへ変換し、NT Kernelに渡す。これにより、NTカーネル上でLinuxのDockerが動作し、Linuxプロセスがネイティブ動作する。
[7] Docker (Solaris)
次期Solarisでサポート予定と発表されてから4年くらい経っているようですが、動きはあまり見えません。Solaris Zone(Solarisコンテナ)をDockerと統合するようです。詳細は不明。(2019年12月更新)
Docker coming to Oracle Solaris
https://blogs.oracle.com/solaris/docker-coming-to-oracle-solaris
[8] Docker on WSL2
Windows上でエミュレートではなくネイティブLinux環境を提供するWSLの次世代バージョンであるWSL2がMicrosoftから発表されました。Windows10上の特殊な小さなVM上で完全なLinux Kernelを搭載するためサポートできないシステムコールがなくなり、今まで以上に互換性が向上するようです。
Docker社はWSL2に最適化した次のバージョンのDocker Desktopをリリースし、Kuberntesをサポートするようです。今までのバージョンではHyper-V上で構築したLinux上で動作していました。
関連する技術
chroot
FreeBSD - Jail
Solaris Zone (旧Solarisコンテナ)
Redhat Linux - OpenVZ
以上、非常にややこしいDockerについてまとめてみました。