Edited at

DockerでRails開発環境を作るワンライナー


Docker上にRailsの開発環境を作る

ローカルにはRailsをインストールせずにDocker上だけでRailsの開発環境を作ってみます。


One liner

下記の作業はこのコマンド一発で実行できます。

curl https://gist.githubusercontent.com/masuidrive/3f8707336ffb286ad212/raw/1660b6d66bf0ef9e8c1dbfbfe228e9a1aa112dc8/docker_rails.sh | RAILS_VERSION=6.0 RAILS_OPTIONS="--skip-turbolinks" RUBY_VERSION=2.6 sh

これで下記に書かれた作業が一気に行われます。


rails new

まずはrails newでプロジェクトを作ります。

docker run --rm -v `pwd`:/usr/src/app ruby:2.6 sh -c "gem install rails && rails new /usr/src/app --database mysql --skip-turbolinks --git --force --version 6"```

## 開発用docker-compose.yml

次にこのRailsプロジェクトを動かすためのDockerfile、docker-compose.ymlを作成します。ここではRailsとMySQLを起動させます。

### ./Dockerfile
```Dockerfile
FROM ruby:2.6
ENV LANG C.UTF-8

RUN apt-get update && \
curl -sL https://deb.nodesource.com/setup_10.x | bash && \
apt-get install -y nodejs mariadb-client --no-install-recommends && \
rm -rf /var/lib/apt/lists/* && \
mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY Gemfile /usr/src/app/
COPY Gemfile.lock /usr/src/app/
RUN bundle install

COPY . /usr/src/app

EXPOSE 3000
CMD ["./bin/rails", "server", "-b", "0.0.0.0"]


./docker-compose.yml

rails:

build: .
command:
[ "bash", "-c", "rm -f tmp/pids/server.pid; ./bin/rails server -b 0.0.0.0" ]
mem_limit: 384m
environment:
DISABLE_SPRING: "1"
ports:
- "3000:3000"
volumes:
- ".:/usr/src/app"
links:
- "mysql"

mysql:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: "passwd"

docker-composeでプロセスを強制終了させるとpidファイルが残ってしまうので、行儀は良くないけど起動時に消しています。開発用のymlだし良いかなと。

この2つのファイルを作ったら、docker imageをbuildします。

docker-compose build


データベースの設定

次にmysqlの接続設定を変更します。config/database.ymlのパスワードをpasswdにして接続先をmysqlにします。

エディタ使うのは面倒なのでsedを使います。

sed -i "" -e 's/password:$/password: "passwd"/;s/localhost/mysql/' config/database.yml


Docker向け設定

そのままだと開発環境でweb-consoleが使えないので、DockerでRailsの開発環境つくったらweb-console動かないを参考にweb-consoleの設定を変更します。

sed -i "" -e "s|^end|  config.web_console.whitelisted_ips = %w( 0.0.0.0/0 ::/0 )"\\$'\n'"end|" config/environments/development.rb


データベースの作成

さてdocker-composeコマンドでRailsとMySQLを起動して空のデータベースを作ります。

docker-compose start

docker-compose run rails ./bin/rails db:create
docker-compose stop


起動

docker-machine ipでIPアドレスを確認して、docker-composeを起動します。

docker-machine ip

docker-compose up

確認したIP:3000をブラウザで開いてください。


参考