Docker Language Stackを使って一撃で開発環境を構築する
はじめに
少々前の話題で恐縮ですが、Docker Hub Registryの公式レポジトリとして、複数のLanguage Stackが公開されました。
これは各種開発言語のそれぞれのバージョンをDockerコンテナで簡単に使えるようにしたものです。
例えばUbuntuコンテナでRubyを使いたい場合、
- apt-getでruby、ruby-devのインストール
- apt-getでrubygemsのインストール
- gemでbundlerのインストール
のようなことをDockerfileで行う必要があります。特定のRubyのバージョンを使いたいなら更にrbenvなどを使わなくてはいけません。これはとても面倒臭いです。しかしLanguage Stackのrubyを使えば一撃で特定バージョンの開発環境をセットアップすることができます。
ということでやってみました!
やってみる
Mac OS X上のboot2dockerを使いました。
Rubyのlatestバージョンを使う
rubyのlatestバージョンを使いたい場合、以下のようにdocker runします。
$ docker run -it ruby:latest /bin/bash Status: Image is up to date for ruby:latest root@2e7bdea07e7d:/#
rubyの状態を確認してみます。
root@2e7bdea07e7d:/# ruby -v ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
ちゃんとrubyの環境が整っています。
Railsアプリをコンテナ化する
このLaunguage StackはONBUILDがサポートされたイメージも配置されています。別のDockerfileから参照することで、簡単に開発環境が含まれたコンテナを作成することができます。
例としてrailsのONBUILDイメージを使ってみます。以下のように新規にrailsアプリケーションを作ってみます。
$ rails new project
そのrailsアプリケーションのディレクトリの中でDockerfileを作成します。今回は特に難しいことをしないので、ONBUILDイメージを参照しているだけです。
$ cd project $ vi Dockerfile FROM rails:onbuild
このrails:onbuildの内容はこちら。FROMでrubyイメージが呼ばれており、そこでRubyの開発環境が設定されています。またGemfileとGemfile.lockのCOPY、bundle install、アプリケーションディレクトリのCOPYなどが行われています。この辺を全部手でDockerfileに書くと超面倒臭いのですが、たった1行で済みます!
ではdocker buildしてみます。
$ docker build -t local/project . Successfully built 30a76b57a6c6 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE local/project latest 30a76b57a6c6 About a minute ago 844.9 MB
作成されたDockerイメージを起動します。
$ docker run -d -p 3000:3000 local/project afe2fdf78f5c8a63fc3dc55172023cd5b06f5c1653b85b0ac8d8788437c65c5f $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES afe2fdf78f5c local/project:latest "rails server" 6 seconds ago Up 5 seconds 0.0.0.0:3000->3000/tcp insane_pike
あとはDockerコンテナの3000/tcpに接続すれば、以下のようにRuby on Railsの初期画面が表示されます。
さいごに
ちょっとスクリプトを作りたい、違うバージョンで動作確認したいなど、実際に手元でやると面倒臭い環境のセットアップが、コマンド一発で出来てしまいます。便利ですね!