やったぜ。 投稿者:変態糞Docker (8月16日(水)07時14分22秒)

最近、Dockerというのが流行っているというそうで、自分もDockerを使ってあるWebサイトの開発用環境をつくるスクリプトを作れ、という仕事を割り当てられた。
そもそもDocker自体なんなのか?というところから調べなければならなかったんだけれども、今の時点で理解できたのはDockerを使うとchroot環境みたいなのが簡単に作れるということ。

仮想化を使う利点は、サーバーと開発PCに同じバージョンのライブラリや実行環境を整えおなじ内容の設定ファイルを入れて…という部分を楽に、確実に行えることである。(自分たちの場合は。これはサーバーの規模にもよると思う。)
その代わりバーチャルなハードウェア をたててOSレベルから動かすとなると、実行速度の面で劣る。

そこでchrootというものがある。
  
Linuxでは、あるディレクトリをルートディレクトリに見立ててその中に同じカーネルを使うユーザーランドを作ることができる。DebianとかUbutnuをDebianたらしめているもの、Ubuntuたらしめているものはこのユーザーランドであるので、Debian環境の一ディレクトリの中にFedore環境を構築したりできる。AndroidもLinuxカーネルを使ってるから、その中でDebianを動かしたりできる。実際やったことあるけど、USBホストが使えれば簡易ファイルサーバーくらいなら余ってるスマートフォンで充分作れてしまう。
これも一種の仮想化になるんだろうけど、仮想化のレベルが高い(ハードやカーネルは仮想化しないわけだし、「高い」と言う、と思う)ため速度面では優位。ただ当然Linuxでしか使えないわけで、WindowsやMacで使いたいならLinux系OSを低いレベルの仮想化で動かさなくてはいけない。開発用に使うとすれば、結局Virtual Box使うことになる。
Dockerがやっていることはほぼこのchrootで、それにくわえてもうちょっと仮想化レベルが低いようだ。また、必要なパッケージや設定ファイルを自動的に入れることもできる。

Docker自体はLinux上で動かすものだけれども、Windows、Mac用にboot2dockerというツールがあって、こいつを使うとDockerを動かすためのVirtualBox仮想マシンを勝手に作ってくれ、その上でDockerを使うことができるようになる。(ホストにはTinyCoreLinuxを使う。)
WindowsやMacで「Dockerを使う」といった場合、結局なんらかのLinuxを仮想マシン上で動かすことになってDockerの「高速」というメリットは受けられない。でもこのboot2dockerと組み合わせれば、数回クリックしてほんのすこしキーボードを叩くだけで完璧な開発環境が出来上がるということだ。

今のところそのWebサイトの開発用にMacbookを借りてネイティブにRailsやらなんやらを動かしてやっているのだが、その借りているMacbookがCore2duo(SUなんちゃらなのだがなんとT100よりCPUがショボい!)だしキーボードがJIS配列だし何よりMacだしでうんざりしている。
なのでとっとと開発環境を仮想化して自分のPCに移行したい。

もうひとつのDockerの特徴はイメージを差分管理できることらしいけれども、こっちの方はまだ何がなんだかわからない。ベースとなる仮想環境をRead-Onlyで作って、すべての変更を上に乗っているWritableなレイヤーにかぶせるというものらしい。このおかげで何かまずっても上のレイヤーを取り除けば最初の環境をすぐに復元できるということなのだろうか。でも、このメリットがいまいちわからない。時間はかかるけどまた改めてスクリプトを走らせて一から作るのではダメなのだろうか?

というわけで、じっさいにはまだスクリプトは完成していないので全然「やったぜ。」ではないのだけれども、とっととMacを使わなくて済むようにしたいものだ。