DockerでRails5.2の環境を構築する その2

さて、前回に引き続いてDockerでのRailsの開発環境の構築。

前回:DockerでRails5.2の環境を構築する その1
https://developer-collaboration.com/2018/08/03/docker-rails5-2-1/

前回の手順で気になっていた部分として初期の立ち上げの時にイメージをあげて何度か作り直していた点です。

今回は起動時にシェルを読み込むことでプロジェクトがなければ作ったりなどを実施しています。

実施している手順は以下になります。

1. rubyのイメージを利用したDockerコンテナでrails5.2をインストールしたイメージを作成し起動シェルを導入。

2. 上記イメージとpostgresのイメージでコンテナを作成し起動。

3. 起動シェルが状態を確認し、「rails new」、「bundle install」、「rake db:create」をvolume上に実施。

 

構築環境の準備

どこか適当なディレクトリを作成し以下の6つのファイルを作成します。

 

 

 

 

 

 

シェルを切り出したりなど主に悩んだ点は以下です。

  • プロジェクトの作成などはvolumeをマウントした後でないとできないので、ENTRYPOINTかCOMMANDなどイメージ作成後でないといけない。
  • 「rake db:create」もDBのコンテナが上がった後に実施の必要がある。
    上記は1度でも良いので複数回立ち上げたりなどでも回避できるが手順が煩雑になる。
  • pidファイル削除など毎度実施したいコマンドもある。
  • 実際に作り込んでいくとシェル切り出しの方が使い回しが良さそうなので、ENTRYKITなど利用せずに実施。
  • 「–path vendor/bundle」などしてプロジェクト内にbundleファイルを落としてもいいが、起動やデプロイに時間がかかるのでパス指定なし。
  • COMMANDを複数指定した際にアプリをlistenしているプロセスIDが「1」になるか。

 

コンテナの作成

起動に関しては以下のコマンドを実行します。

 

2度目からは「docker-compose up」のコマンドのみで大丈夫です。

尚、「web」のコンテナ上でのプロセスの状態は以下になります。

 

無事、3000でlistenしているプログラムがPID 1になりました。

実際にはこの後に「spring」を設定してみたり、「redis」も一緒に動かしちゃえだったり、諸々の自動化の設定をシェルに書いていったりと改変は大きくなりそうですが、基本的なところは実施できたかなというところです。