本記事の対象者
Railsは未経験でしたが、とりあえず学習環境つくろうと思い、備忘録のため記事化しました。
アプリケーションの開発に集中するため、Docker環境をコピペで作りたい人向けの記事です。
Rails6を対象としています。
自身のスキルレベル
- Railsは全くの未経験(なんにも知りません)
- Dockerはそこそこやったことあります
- 他フレームワークでWebの基本的な開発はやったことあります
必要なファイル
環境構築に必要なファイルは以下の通りです。
myappディレクトリを作って、以下のファイルを作成してください。
myapp
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml
1. 環境構築
1-1. Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
# 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
# Node.js
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
1-2. docker-compose.yml
後にHerokuを使うため、dbはPostgreを指定しました。
(Postgreだと無料でHeroku環境が作れるため)
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
volumes:
- ./tmp/db:/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
1-3. Gemfile
Rails用のパッケージファイルだそうです。
バージョン6を指定しています。
source 'https://rubygems.org'
gem 'rails', '~> 6'
1-4. Gemfile.lock
空のGemfile.lock
を作成しておきます。
後にビルド時に自動的に更新されます。
1-5. 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 "$@"
2. ビルド
Dockerのビルド。
$ docker-compose build
パッケージのインストール。
$ docker-compose run web yarn
Rails6から必須のwebpackerのインストールを行なっておきます。
$ docker-compose run web bundle exec rails webpacker:install
コンテナ起動とDBの作成を行います。
$ docker-compose up
$ docker-compose run web rake db:create
ここまで成功したらRailsが起動していることを確認します。
同時に、ローカル環境にRailsの環境一式がインストールされていることを確認してください。
3. Herokuデプロイ
作った環境をインターネット経由でもみたい方は、Herokuにデプロイするところまでやってみましょう。
Herokuのアカウントが無い人は事前に作成しておいてください。
作ったローカル環境をHerokuにデプロイします。
# herokuのコンテナレジストリにログイン
heroku container:login
# 新しいappを作成
heroku create
# イメージを作成してコンテナレジストリにpush
heroku container:push web
# postgresqlアドオンの無料プランを追加
heroku addons:create heroku-postgresql:hobby-dev
# DBセットアップ
heroku run rails db:migrate
# イメージをherokuへデプロイ
heroku container:release web
# 実際にアクセスして/usersを確認してみる
heroku open
4. アプリを開発
ここまでできたら、あとはアプリを開発のみです。
お疲れ様でした。