DockerでRailsの環境構築をする
はじめに
CAMPFIREとかマネーフォワードとか、Dockerを使っている企業も多くなってきてますね。
というわけで、私もDockerを使ってみたいと思ったわけです。
とりあえずDockerでRails動かしてみたい!って方向けに書いてますので、細かい文法等は公式リファレンスを参考にしてください。
サンプル
今回の実装結果をGitHubに上げておきましたので、良ければ利用してください。
https://github.com/HiroyukiYagihashi/rails-on-docker
実装
Dockerのインストール
DockerHubへの登録、Dockerのインストールを行います。
上記のDockerリンクはMacOS用ですが、他のOSを使っている方はそれぞれに合ったDockerをインストールしてください。
プロジェクトの作成
まず、適当にフォルダを作成します。
この中にプロジェクトを作成していくのでプロジェクト名とかがいいと思います。
今回は仮でmyapp
にしています。
myapp
フォルダの作成
$ mkdir myapp
ここから先はmyapp
内での操作となりますので、移動しておきましょう。
myapp
への移動
$ cd myapp
Dockerfileを作成し、内容を記述していきます。
Dockerfile
の作成
$ touch Dockerfile
Dockerfile
の内容を記述
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
次にGemfile、Gemfile.lockを作成していきます。
GemfileはRailsをインストールするために、ここで作成しています。
あとでrails new
を実行した時に上書きされます。
Gemfile.lockの中は空で大丈夫です。
Gemfile
、Gemfile.lock
の作成
$ touch Gemfile && touch Gemfile.lock
Gemfile
の内容を記入
source 'https://rubygems.org'
gem 'rails', '~>5'
ここで、entrypoint.sh
を作成していきます。
現在、特定のserver.pid
ファイルが存在する時、サーバーが再起動するのを妨げるエラーが発生しているらしいです。
このシェルスクリプトを追加すると、上記のエラーを解消してくれるとのこと。
entrypoint.sh
の作成
$ touch entrypoint.sh
entrypoint.sh
の内容を記入
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
最後にdocker-compose.yml
を作成&記入していきましょう。
docker-compose.yml
の作成
$ touch docker-compose.yml
docker-compose.yml
の内容を記入
version: '3'
services:
db:
image: postgres
ports:
- '5432:5432'
volumes:
- postgresql-data:/var/lib/postgresql/data
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
volumes:
postgresql-data:
driver: local
必要なファイルが作成されました。
最終的にこういうファイル構成になったらOKです。
myapp/
┣ Dockerfile
┣ docker-compose.yml
┣ entrypoint.sh
┣ Gemfile
┗ Gemfile.lock
プロジェクトをビルド
ビルドの準備ができたので、実際にビルドしていきましょう。
Docker上でrails newを実行
$ docker-compose run web rails new . --force --no-deps --database=postgresql
イメージをビルド
$ docker-compose build
データベースの接続
Railsはデフォルトでlocalhostのデータベースに接続される設定になっています。
ですが今回はDBコンテナ(PostgreSQLイメージ)に接続されるように設定を変更します。
database.yml
の設定を変更
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password:
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
コンテナ作成&起動
$ docker-comnpose up
DBの作成&マイグレート
$ docker-compose run web rake db:create
$ docker-compose run web rails db:migrate
RailsWelcomeページを表示
ブラウザでhttp://localhost:3000/ にアクセスしてみましょう。
こんな感じのが出たらOKです!🙌
もし止めたい場合は下記のコマンドを実行してください。
$ docker-compose down
間違いなどありましたらお教えください!
参考URL
Author And Source
この問題について(DockerでRailsの環境構築をする), 我々は、より多くの情報をここで見つけました https://qiita.com/HiroyukiYagihashi/items/774261b6484966039ef6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .