Docker上にRailsの開発環境を作る
ローカルにはRailsをインストールせずにDocker上だけでRailsの開発環境を作ってみます。
One liner
下記の作業はこのコマンド一発で実行できます。
curl https://gist.githubusercontent.com/masuidrive/3f8707336ffb286ad212/raw/53458a9f12249490a6013387bb344b633e1fffe1/docker_rails.sh | sh
各種バージョン指定は下記のように行えます。
curl ..rails.sh | RAILS_VERSION=7.0 RAILS_OPTIONS="--css tailwind" RUBY_VERSION=3.0 NODE_VERSION=16 sh
これで下記に書かれた作業が一気に行われます。
rails new
まずはrails new
でプロジェクトを作ります。
docker run --rm -v `pwd`:/usr/src/app ruby:3.0 sh -c "gem install rails && rails new /usr/src/app --database mysql--git --force"```
## 開発用docker-compose.yml
次にこのRailsプロジェクトを動かすためのDockerfile、docker-compose.ymlを作成します。ここではRailsとMySQLを起動させます。
nodeはRails 7では必須ではありませんが念のため入れておきます。
### ./Dockerfile
```Dockerfile
FROM ruby:3.0
ENV LANG C.UTF-8
RUN apt-get update && \
curl -sL https://deb.nodesource.com/setup_16.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
version: "3"
services:
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"
- "/usr/src/app/node_modules"
links:
- "mysql"
mysql:
image: mysql/mysql-server:8.0.20
environment:
MYSQL_ROOT_PASSWORD: "passwd"
MYSQL_ROOT_HOST: '%' # https://zenn.dev/ryo_kawamata/articles/mysql-connect-error
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 run
コマンドでRailsとMySQLを起動して空のデータベースを作ります。
docker-compose run rails --rm ./bin/rails db:create
起動
docker-compose
を起動します。
docker-compose up
localhost:3000
をブラウザで開いてください。