LoginSignup
14
21

More than 1 year has passed since last update.

【Imagemagick対応】Dockerを利用して、Rails環境を作成

Last updated at Posted at 2019-05-06

はじめに

  • 初心者の方でも簡単に再現可能
  • 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からアクセス可能
  • コンテナ構成.png

  • コンテナ構築方法

    • 以下記載の手順をそのまま実行してください

1. フォルダ、ファイルの準備

  • 好きな場所にフォルダを新規作成
  • フォルダ内に4つのファイルを作成(中身は空でOK)
  • 例)この記事では、フォルダ名をhoge_folderとしています

    • hoge_folder
      ├ Dockerfile
      ├ docker-compose.yml
      ├ Gemfile
      ├ Gemfile.lock

2. ファイルの編集

  • 1. で作成した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
  • Webブラウザでhttp://localhost:3000にアクセスしてみる

    • Yey ! 君はrailsの上にいるze !
    • rails_top.png
  • railsの起動停止

コマンド
(再起動する場合)
$ docker-compose restart
(停止する場合)
$ docker-compose stop

>> 次の記事

  • Rails on Docker で作ったWebページを公開してみよう

Dockerで作成したRailsアプリをHerokuにデプロイ
https://qiita.com/NA_simple/items/57ad10717568fea2160b

謝辞

  • @akirakudo さんの記事は、大変参考になりました

https://qiita.com/akirakudo/items/16a01271b0a39316e439

14
21
0

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
14
21