最近はVagrantやChefをかじっていましたが、世間はどうもDockerで盛り上がっている様子です。
Dockerについての知識は、
「仮想化ソフトウェアの一種?」「コンテナ型?」「速いらしい」
くらいのぼやっとしたものしかありません。さすがにこの知識では恥をかきそうなので、少し調査してみることにします。
とりあえずDocker上で何らかのアプリを動作させることができれば、ある程度理解できるのではないでしょうか。
環境はWindows 7 (64bit)。動作させるアプリはJenkinsとします。
Dockerのインストール
まずは動かしてみる派なので、理屈などは後回しにしてインストールを試みます。
instllationの項目を確認すると、Microsoft Windowsの項目がありました。Linux環境は用意しなくてもよさそうです。
Docker for Windows Installer からダウンロードします。執筆時点での最新は 1.2.0 です。
次に、ダウンロードした docker-install.exe を実行します。
インストールはウィザード形式で進みます。
Select Components のところで、 VirtualBox と Msys -Git UNIX tools のチェックを入れる箇所があります。既にインストールされていれば不要です。なければ両方入れておきましょう。
インストール完了後、PCをリブートします。
Boot2Dockerの実行
リブートが完了したら、スタートメニューから Docker -> Boot2Docker Start を実行します。
クジラが出た後、コマンド入力が可能になります。
ふと思いついてVirtualBoxマネージャーを見ると、boot2docker-vmというVMが出来ていました。
つまり、Windowsで動作するDockerというわけではなく、Docker入りのVirtualBoxと連携してそれっぽくしているだけのようです。
Docker Hub Registry でDockerイメージを探す
次に、Dockerに乗せるDockerイメージを探します。Dockerイメージは、ベースとなるテンプレートみたいなものです。(イメージ的にはAWSのカスタムAMIに近い、気がする)
Dockerイメージは Docker Hub Registory に大量に公開されています。ubuntuやcentosなどのOSイメージもあれば、nodeやnginxといったアプリケーションが乗っかっているものもあります。
今回は Jenkins のDockerイメージを利用してみます。
Jenkinsを動作させる
以下のコマンドで、JenkinsのDockerイメージのダウンロードと、「myjenkins」という名称のコンテナ(VMイメージのようなもの)を作成し、起動します。
docker run --name myjenkins -p 8080:8080 jenkins
-p のオプションはポートフォワーディングの設定です。
バージョン指定したい場合は jenkins:1.554 のように、コロンの後にタグを指定します。指定可能なタグは Tags で確認できます。
ダウンロード時間込みで2分ほどで起動。
早速アクセスしてみます。
無事起動しました。お手軽です。
ここでの注意点は、コンテナにとってのホストは boot2docker-vm であり、Windowsの方ではないということです。ポートフォワーディング設定はboot2docker-vmに対してのものになります。<boot2docker-vmのIP:8080>アクセスしてください。DockerがWindows上で動作していると思い込んでいるとハマります。(私はハマりました)
飽きるまでいじったら、Ctrl+CでJenkinsを止めます。
起動速度を見てみる
イメージのダウンロードやセットアップにかかった時間のおかげで、売りである起動速度が実感できませんでした。なのでコンテナを再起動してみます。
以下のコマンドでmyjenkinsコンテナを起動します。
docker start myjenkins
一瞬でコマンドが返ってきました。コマンド間違ったか?と思いアクセスしてみましたが、ちゃんと起動していました。速いとは聞いていましたが、まさか1秒かからないとは。
ちょっと調べた感じでは、コンテナ型仮想化というのはホストOSとの共通部分を共有しているから高速なのだそうです。DockerがLinuxで動作している以上は、Linux系OSしか動作しないということですね。
おわりに
とりあえずDockerが軽量で高速であることはよくわかりました。まだまだ理解は浅いですが、入りとしてはこんなものでいいのではないでしょうか。
今後は実際にDockerイメージを作ったりしてより理解を深めていこうかなと思います。infoScoopのイメージを作って Docker Hub Registory に登録してみるのもいいかもしれません。