20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerでRuby on Railsの開発環境を構築

Last updated at Posted at 2016-09-06

概要

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も一つのコンテナにまとめました。

が、管理が煩雑にならずに上記のベストプラクティスを維持できる方法があれば取り入れたい(誰か教えて下さい)。

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?