概要
ubuntu 16.04 をベースに以下の構成でイメージを作成しました。
- rails 4.2.6
- ruby 2.2.5
- PostgreSQL 9.5
Dockerさえインストールしていれば、すぐにRuby on Railsでの開発が始められると思います。
環境
- OS X 10.10.5
- Docker 1.12.0
ソース
イメージのインストール
いずれかの方法で、コンテナのイメージをインストールしてください。
a. Docker Hub から pull
$ docker pull mktktmr/docker-rails-postgresql
b. ソースからビルド
$ git clone https://github.com/mktktmr/docker-rails-postgresql.git
$ cd docker-rails-postgresql
$ docker build -t mktktmr/docker-rails-postgresql .
確認
docker images
でイメージの存在を確認。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mktktmr/docker-rails-postgresql latest ba322d4f4504 59 minutes ago 925.5 MB
ubuntu latest bd3d4369aebc 11 days ago 126.6 MB
コンテナの起動
docker run
でコンテナを起動する。
$ docker run -it --name rails -p 3000:3000 mktktmr/docker-rails-postgresql
コンテナが正常に起動すれば、コンテナのコンソールに切り替わります。
root@58f24edfbd76:~#
Ctrl + d
などでコンテナから抜けられます。
root@58f24edfbd76:~# exit
オプションについて
-it
ターミナルでインタラクティブにコンテナの操作ができるようになります。
--name
コンテナに任意の名前を付けることができます。
-p
ホストOSとコンテナのポートマッピングを設定します。
永続化
コンテナは基本的にステートレスであるため、再起動するとコンテナ上で作成したファイルなどは消えてしまいます。
データベースのデータなどを保持したい場合、永続化のための作業が必要です。
色々と方法があるみたいですが、一番手軽(だと思う)な方法を紹介します。
今回は例としてPostgreSQL(DB)の永続化。
ボリュームを作成
docker volume create
でマウント用のボリュームを作成
$ docker volume create --name postgresql
作成したボリュームは docker volume ls
で確認できます
$ docker volume ls
DRIVER VOLUME NAME
local postgresql
ボリュームをマウントしてコンテナを起動
docker run
の -v
オプションで作成したボリュームとPostgreSQLのディレクトリをマウント。
$ docker run -v postgresql:/var/lib/postgresql -it --name rails -p 3000:3000 mktktmr/docker-rails-postgresql
これで、コンテナを再起動してもデータベースが消えることがなくなります。
参考
『Docker実践入門――Linuxコンテナ技術の基礎から応用まで』
所感
仮想化もそうですが、ローカルを汚さずに環境を構築できることはいいことですね。
「過去に構築した環境が競合して〜」みたいなトラブルもないですし、気軽に環境を壊したり作り直したりできます。
最近はDockerがWindowsやMacでも仮想環境をかまさずに動くので、
今回のようなちょっとした開発環境の構築にも利用しやすくなっているのではないかと思います。
課題
1コンテナ1プロセスという構成にするのが、Dockerのベストプラクティスみたいだけど、
今回は開発環境構築の簡略化がテーマだったので、管理が煩雑にならないよう、RailsもDBも一つのコンテナにまとめました。
が、管理が煩雑にならずに上記のベストプラクティスを維持できる方法があれば取り入れたい(誰か教えて下さい)。