目的
ローカルマシンにRailsをインストールせずに、DockerだけでRailsプロジェクトを簡単に立ち上げること
Step1: プロジェクト作成用のdocker-compose.ymlの作成
任意の作業ディレクトリでdocker-compose.ymlを作成し以下のように編集
version: '3'
services:
  rails:
    image: ruby:2.5.1 # a
    command: tail -f /dev/null # b
    container_name: rails # c
    volumes:
      - .:/app # d
a. rails newを実行するための環境を備えたimageを指定。今回は公式のruby imageから手動でrailsのインストールをしてRailsプロジェクトを作成していく。あくまでrails newを実行するためのimage。プロジェクト作成後ruby:2.5.1-alpineなどからDockerfileを自作して必要なモジュールだけインストールしてスリムアップした状態で開発していくことも可能。ただ、プロジェクト作成後にimageを変えてしまうとOSの差異で挙動が変わってしまう恐れがあるので、imageを自作するのであれば自作したimageの上でrails newするのが安全
b. コンテナはコマンドの実行が終了してしまうとコンテナ自体も終了しまう。そうなると、コンテナ上でコマンドの実行等ができなくなってしまうため、tail -f /dev/nullでコマンドの実行状態を保つ
c. コンテナの名前。コンテナに入るときに使う
d. ローカルマシンとDockerコンテナを同期させる。:で区切られていて左側が同期したいローカルマシン内のpathで右側が同期したいコンテナ内のpath。今回はコンテナ内の/app下で作業する
Step2: コンテナ内でrailsのインストールし、rails new
docker-compose.ymlがあるディレクトリ内で以下のコマンドを実行し、コンテナ内に入る
$ docker exec -it rails /bin/bash
作業ディレクトリに移動し、gem install rails
$ cd /app
$ gem install rails
rails newする(オプションはお好みで)
$ rails new -B -d mysql --skip-test .
$ bundle install --path vendor/bundle --jobs=4
実行すると同期されているのでローカルマシンに作成されたファイル群が追加される。
まとめ
gitはローカルマシンで管理しないといけないが、その他の開発はコンテナ内で実行することが可能になる。ローカルマシンにはgitとDockerだけ入れておけば作業が始められる