LoginSignup
38
33

More than 5 years have passed since last update.

Ruby on railsのDockerイメージ作成

Last updated at Posted at 2017-11-14

概要

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.png

実際に開発する場合

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

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

以上

参考サイト

以上

38
33
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
38
33