Dockerを利用してrailsを起動させる方法を備忘録として
前提条件として
開発に使用するPCに Docker をインストール。
Docker公式
次に任意のファイルを作成。
ここではrails-docker
としたが、何でもok
$ mkdir rails-docker
$ cd rails-docker
必要なファイルの作成
まずは rails-docker ディレクトリローカルの中に
以下の 5 つの空ファイルを作成する
・Dockerfile
・docker-compose.yml
・Gemfile
・Gemfile.lock
・entrypoint.sh
下記コマンドを打てば一回で作成可能
$ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh}
Dockerfile を編集
※rubyのバージョンは要確認
FROM ruby:2.7.5
# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn
RUN apt-get update -qq && apt-get install -y nodejs yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
RUN yarn install --check-files
RUN bundle exec rails webpacker:compile
# コンテナ起動時に実行させるスクリプトを追加
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Rails サーバ起動
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml を編集
MySQL (DB) を動かすコンテナサービスを起動し、サービス間での連携が必要な場合には
Docker Compose
というツールを利用
ymlに記述することでビルドやコンテナの起動を一括で行うことが可能。
・db欄でMySQL (DB) の起動に関する設定
・web欄でrailsの起動に関する設定
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "3306:3306"
volumes:
- ./tmp/db:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
Gemfile の編集
source 'https://rubygems.org'
gem 'rails', '~> 6.1.4'
entrypoint.sh の編集
#!/bin/bash
set -e
rm -f /rails-docker/tmp/pids/server.pid
exec "$@"
プロジェクトのビルド
以下のコマンドをターミナルで実行
docker-compose run
を行うことで設定ファイルで定義された通りに、新たなコンテナを作成できる。
$ docker-compose run web rails new . --force --no-deps --database=mysql
次に下記を実行。サービスのビルドを実行
$ docker-compose build
config/database.ymlファイルの書き換え
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
development:
<<: *default
database: myapp_development
host: db
username: root
password: password
test:
<<: *default
database: myapp_test
host: db
username: root
password: password
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
ブラウザで立ち上げ
rails s
でサーバー起動
ブラウザのアドレスバーに http://localhost:3000/ と入力して立ち上がれば成功