Ruby on railsのDockerイメージ作成


概要

Ruby on railsのローカル環境をDockerで構成してみようとやってみたことをメモします。

ミドルウェアの構成

  • Ruby 2.5 (Ruby on rails 5.2)
  • MySql 5.7

Dockerイメージ作成 (Ruby on Rails)

ファイル構成

ファイルの構成は以下のようになります。

ファイル構造
opt
 ├ .gitignore
 ├ database.yml
 ├ docker-compose.yml
 ├ Dockerfile           ・・・ railsのイメージを作成するDockerfile 
 ├ Gemfile              ・・・ bundle installでインストールするライブラリの定義ファイル
 └ README.md

Dockerfile作成

rubyのコンテナをビルドするDockerfileを作成します。

./docker/rails/Dockerfile
FROM ruby:2.5

ENV LANG C.UTF-8
ENV WORKSPACE=/usr/local/src

# install bundler.
RUN apt-get update && \
    apt-get install -y vim less && \
    apt-get install -y build-essential libpq-dev && \
    gem install bundler && \
    apt-get clean && \
    rm -r /var/lib/apt/lists/*

# create user and group.
RUN groupadd -r --gid 1000 rails && \
    useradd -m -r --uid 1000 --gid 1000 rails

# create directory.
RUN mkdir -p $WORKSPACE $BUNDLE_APP_CONFIG && \
    chown -R rails:rails $WORKSPACE && \
    chown -R rails:rails $BUNDLE_APP_CONFIG

USER rails
WORKDIR $WORKSPACE

# bundle install.
COPY --chown=rails:rails Gemfile $WORKSPACE/Gemfile
RUN bundle install && \
    bundle exec rails new . --force --database=mysql && \
    { \
        echo "gem 'therubyracer', platforms: :ruby"; \
    } >> $WORKSPACE/Gemfile && \
    bundle update
COPY --chown=rails:rails database.yml $WORKSPACE/config/database.yml

EXPOSE  3000
CMD ["rails", "server", "-b", "0.0.0.0"]

Gemfile作成

bundle installで使うGemfileを作成します。

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5.2.0'

database.yml作成

railsのデータベース設定ファイルを追加します。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  database: <%= ENV['APP_DATABASE'] %>
  username: <%= ENV['APP_DATABASE_USER'] %>
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

development:
  <<: *default
  host: mysql

test:
  <<: *default
  host: mysql

production:
  <<: *default
  host: mysql

docker-compose.yml作成

下記の内容にて、mysqlとrubyのコンテナを作成する。

docker-compose.yml
version: '2'
services:
  rails:
    build: .
    image: my/rails
    container_name: 'rails'
    tty: true
    ports:
      - "80:3000"
    environment:
      APP_DATABASE: 'example'
      APP_DATABASE_USER: 'app'
      APP_DATABASE_PASSWORD: 'development'
    volumes:
      - app-data:/usr/src/app
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    container_name: 'mysql'
    environment:
      MYSQL_ROOT_PASSWORD: 'mysql'
      MYSQL_DATABASE: 'example'
      MYSQL_USER: 'app'
      MYSQL_PASSWORD: 'development'
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  app-data:
     driver: local
  mysql-data:
    driver: local

コンテナ構築

下記コマンドにて各コンテナを構築します。

ターミナル
$ docker-compose build

サーバ起動

下記のコマンドにてサーバを起動する。

$ docker-compose up -d

dockerで3000ポートを80ポートに接続しているので、ブラウザで下記URLにアクセスしてみる。

ブラウザ
http://192.168.99.100/

※ ここ記事では、Docker Toolboxの仮想環境を使用しています。
※ 192.168.99.100のIPの部分は、各環境に合わせて変更ください。

実際に開発する場合

このままだと、railsのコードがrailsコンテナ内にあり、エディタやIDEで編集し難い。
そのため、もう少しやり方を考える必要がありそう...

下記で再度構築してみたので、追記しておきます。
Ruby on railsのDockerイメージ作成(再) - 2018/11/13作成

以上

参考サイト

以上