LoginSignup
184

More than 1 year has passed since last update.

DockerでRails開発環境を作るワンライナー [Rails7/M1 Mac対応]

Last updated at Posted at 2016-03-23

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をブラウザで開いてください。

Screen Shot 2021-12-22 at 13.50.29.png

参考

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
184