VagrantとDockerのセットアップ
Windows 8.1環境にVagrant+Docker環境を作成した時のメモのようなものです。
Vagrant
VirtualBoxのフロントエンドとして動作するツールで、
vagrant up
とかするとVMが起動できたりするものです。Vagrantfileに構成を書いておくことで、コマンド1つでVMを作ったり消したりが簡単にできるようになり、インフラのCIなんかでよく使われるようです。
Vagrantのセットアップ
セットアップには、VirtualBoxとVagrantをインストールします。
サイトはGoogle先生に聞いてください。
Vagrantは少し前まではgemでインストールするのが主流だったようですが、最近はインストーラが用意されているのでWindows環境でも楽にインストールできました。
ちなみに、VMWareのフロントエンドとして動くバージョンも商用であるみたいです。
VMを起動する
Dockerを入れるので、CoreOSというのを入れることにします。
パッと見、CentOSに見えますが違います。カーネルとなんとかだけの軽量なLinuxOSです。
Gitで取ってくる必要があるので、Windows環境にインストール済みのCygwinを使うことにします。
# git clone https://github.com/coreos/coreos-vagrant/ # cd coreos-vagrant # vagrant up
ここでエラーが出ました。
incompatible character encodings~
Windows-31Jがどうとか言ってましたが、OS上のユーザ名が日本語文字になっていて、Vagrantのリポジトリ(?)が、%HOME%/.vagrantに作られるので、日本語を含むパスの処理でエラーになった模様です。
手っ取り早く、この.vagrantの格納先を変更することにします。これには、環境変数「VAGRANT_HOME」を設定してやればOKです。
この状態で一度、すでに作られた%HOME%/.vagrantを削除して、もう一度vagrant upをすれば多分大丈夫だと思います。
Docker
主流のハイパーバイザ型とは一線を画する、コンテナ型の仮想環境だそうです。詳しくはもっと詳しいサイトをご参照ください。Solarisコンテナなんかと同じ感じなのかな?
コンテナ型の制約として、ホストと同じOSしか動作できないというものがあります。なのでLinuxだとLinuxしか動きません。ただし、ディストリビューションは問われないようです。ホストには軽量なCoreOSを入れておいて、実際に起動するVMにCentOSやUbuntuを入れるという使い方を想定しています。
Dockerのセットアップ
先ほど導入したCoreOSにはDocker環境がインストールされているので改めて何かを追加する必要はありません。
元々はUbuntuしかサポートしていなかったみたいですが、最近はRedhat系もサポートしたみたいで、CentoOSにもEPELリポジトリ追加してyumで入れることができました。
VMの起動
Dockerはイメージを用意してそれを元に起動、というようにするみたいで、VMを作ってOSをインストール、というのとはちょっと違うようです。
イメージはベースになるものが公開されているので、例えばCentOS環境であれば下記のようにして簡単に追加できます。
# docker run -i -t centos /bin/bash
これで/bin/bashを起動し、VMのターミナルを起動できるわけですが、初回起動時にこのcentosイメージをdotcloudのイメージリポジトリみたいなところから取得してきます。
Apacheを起動してみる
Apache(HTTPD)を追加して起動してみます。
プログラマブルにVMを作成できるようにDokerfileを書いてみます。
# vi Dockerfile FROM centos RUN yum -y update RUN yum -y install httpd EXPOSE 80 CMD ["apachectl", "-D", "FOREGROUND"]
これをビルドしてDockerイメージを作成します。
# docker build -t nobrooklyn/httpd .
- tのあとのはイメージの名前です。慣例として[ユーザ名]/[イメージ名]とするようです。
# docker images
で作成したイメージを確認できます。
あとはこれをDetach Modeで起動すればOKです。あと、ポートフォワードの設定も一緒に。
# docker -d -p 8080:80 nobrooklyn/httpd
あとはローカル(この場合はCoreOS)からcurlコマンドなんかで応答を確認できます。
まとめ
Vagrant+Docker環境が用意できました。
Docker自体はまだ開発途上であり、Production環境で使用するのは推奨されないようですが、簡単にVM作ったりできるのでインフラ構成のテスト用として注目されているようです。
ちなみに、Immutable Infrastructureという考え方で、インフラは不変であり、環境変更するときは新たに新しい環境を用意してデプロイするんだよということのようです。
Chefなんかの、構成を柔軟に変更していくという考え方とは少し違うようです。