LoginSignup
1
0

More than 5 years have passed since last update.

Rails on Dockerの開発環境構築(複数のHost環境バージョン)

Last updated at Posted at 2017-04-25

今回の目的

既存のRuby on Railsアプリケーションをローカルマシン(基本Mac)上の複数Docker Hostで動かす
※Railsアプリケーションを複数立ち上げるという意味ではなく、Railsアプリケーションを含む複数の開発環境を持ちたいケースになります

基本構成

複数コンテナ構成

  • rails app (ruby image base)
    Based on docker library But this is deprecated at 5/15/2017
  • database (mysql image base)
  • KVS (redis or memcache image base)

それぞれを別コンテナとして立ち上げ、連携させる。
= Docker Composeを使用

詳細

docker-compose.yml, Dockerfile等は以下Githubに。
Github hihats/rails-on-docker

基本的には上記リポジトリのREADMEに書いてあるとおりの手順ですが、rails newでイチから作成する段階で動作するかは試しておりません。
あくまでこのリポジトリに「既存のRailsアプリケーションのリポジトリ」をマージさせた上で、docker-machine createからdocker-compose up -dまでの確認のみ。

ちなみにMac && DockerToolboxでの動作確認のみです(理由は後述)

Docker for Mac対応

軽くDocker for Macについて説明

インストールだけでビルドできる
Docker用の軽量仮想環境HyperKitを使用して構築できる。
つまりDocker for Macを起動しているだけで、最初からいきなり、docker-compose buildで各コンテナのビルド可能。

具体的には、dockerコマンドが常に/var/tmp/docker.sockを通してUnixドメインソケット通信するようになっている。Socket APIでDocker Engineを操作可能なため、直接MacからAPI叩いてdockerを動かしているような感覚です。

ところが

そうなると、ソケットが単一になるのでインターフェースも単一に限られてしまう?(実際、Dockerホストの指定方法はlocalhostのみっぽい)
これでは基本的に複数のマイクロサービスを並行で動かして独立して開発する自分の作業フローには合わなくなりそう。

However, if you want to create multiple local machines, you need Docker Machine, which is still available to create and manage machines for power users or multi-node experimentation.
https://docs.docker.com/machine/get-started/#prerequisite-information

やはり雲行きが。。
複数立ち上げるなら未だ docker machineが必要。

Currently, there is no docker-machine create driver for HyperKit, so you will use virtualbox driver to create local machines. (See the Docker Machine driver for Oracle VirtualBox.) Note that you can run both HyperKit and Oracle VirtualBox on the same system.
https://docs.docker.com/machine/get-started/#prerequisite-information

せっかくのHyperkitも docker machine用のドライバがまだない。
Currently なので、今後に期待か。

つまり複数環境で使う場合(Railsに限らず)

従来通り、docker-machine create --driver virtualbox *** で作成するしかない。(2017/4時点)
今後、Docker MachineでHyperkitを指定できるようになるか、Docker for Macが複数ホスト保持可能になるか、気長に待ちましょう。

幸い、Docker for MacにもDocker Machineは入っているので特に何もせず、これまで通り使えます。
手軽に「ひとつRailsアプリをDockerで使ってみたい」という場合にはHyperKitでよいと思います。docker system系のコマンドが使えるようになっただけでもDocker for Mac超超便利だす。

実用にあわせてより拡張する

npmなどのパッケージ群や、DBのデータそのものをVolumeとする別コンテナをたてたほうが、定期的に同期するケースなどで理に適っています。
参考

今回はとりあえず、開発着手しているRailsをDockerで動かしてみたい場合のソースコードとなっております。

1
0
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
1
0