はじめに
- 初心者の方でも簡単に再現可能
- Imagemagickが使用可能
- この記事は、以下の記事を参考にして作成しています
- Heroku にもビルド可能なイメージです
DockerComposeでコンテナベースのRailsアプリを作成してそのままHerokuにデプロイする
https://qiita.com/akirakudo/items/16a01271b0a39316e439
-
引用元記事での問題点
- rmagickが使用できない
- 引用元記事では、ベースイメージにalphineを採用
- このベースイメージでは、Imagemagick 7 が使用されており、gem install rmagick でエラーが発生する
- gem rmagick では、Imagemagick 6 までしか対応していないことが原因
-
対策
- ベースイメージを alphine から Debian へ変更
環境構築方法
-
コンテナの概要
- RailsコンテナとPostgreSQLコンテナから構成
- 両者は、local環境のカレントディレクトリにマウントされている
(※カレントディレクトリ = Dockerfileが置いてあるディレクトリのこと) - Railsコンテナはポートフォワーディングにより、localhost:3000からアクセス可能
-
コンテナ構築方法
- 以下記載の手順をそのまま実行してください
1. フォルダ、ファイルの準備
-
好きな場所にフォルダを新規作成
-
フォルダ内に4つのファイルを作成(中身は空でOK)
-
例)この記事では、フォルダ名を
hoge_folder
としています- hoge_folder
├ Dockerfile
├ docker-compose.yml
├ Gemfile
├ Gemfile.lock
- hoge_folder
2. ファイルの編集
-
- で作成した4つのフォルダに以下の内容をコピペする
① Dockerfile
/hoge_folder/Dockerfile
FROM ruby:2.6
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev libxslt-dev make gcc libc-dev nodejs tzdata postgresql-dev postgresql" \
DEV_PACKAGES="build-base curl-dev" \
HOME="/myapp"
WORKDIR $HOME
# Counter Measure to Error:"Autoprefixer doesn’t support Node v4.8.2. Update it"
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get install -y nodejs
RUN apt-get update && \
apt-get install -y mysql-client \
postgresql-client \
sqlite3 \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
ADD Gemfile $HOME/Gemfile
ADD Gemfile.lock $HOME/Gemfile.lock
RUN bundle install
ADD ./ $HOME
COPY ./ $HOME
CMD ["rails", "server", "-b", "0.0.0.0"]
② docker-compose.yml
/hoge_folder/docker-compose.yml
version: '3'
services:
db:
container_name: postgress_db
image: postgres:latest
environment:
POSTGRES_PASSWORD: 'postgres'
web:
container_name: rails_app
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
③ Gemfile
/hoge_folder/Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
gem 'rmagick'
④ Gemfile.lock
/hoge_folder/Gemfile.lock
注)Gemfile.lock の中身は空です
- これでコンテナを立ち上げる準備ができました。
3. コンテナの立ち上げ準備
-
CLIを起動する(bash,コマンドプロント等、ご自身の環境でお使いのものを起動してください。)
-
Dockerfileのあるディレクトリに移動する
- この記事で言えば、
cd /home/...(以下略).../hoge_folder
- この記事で言えば、
-
以下のコマンドを入力
コマンド
$ docker-compose run web rails new . --force --database=postgresql
※実際に入力する際は、$マーク
を消してください
-
コマンドを実行すると、作業フォルダ内(hoge_folder)に複数のフォルダが生成される
-
Databaseの設定を変更する
- このままではpostgreSQLコンテナにアクセスできないため
-
config/database.yml
を開いて、下記内容を上書きする
/hoge_folder/config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db # 上書き
username: postgres # 上書き
password: postgres # 上書き
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
- docker-compose.ymlがあるフォルダ上でビルドする
コマンド
$ docker-compose build
- データベースを作成し、マイグレーションする
コマンド
$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate
- ここまでで、コンテナの準備は終了です。
4. railsの起動確認
- docker-compose up でrailsは自動で立ち上がる
コマンド
$ docker-compose up
コマンド
(再起動する場合)
$ docker-compose restart
(停止する場合)
$ docker-compose stop
>> 次の記事
- Rails on Docker で作ったWebページを公開してみよう
Dockerで作成したRailsアプリをHerokuにデプロイ
https://qiita.com/NA_simple/items/57ad10717568fea2160b
謝辞
- @akirakudo さんの記事は、大変参考になりました