概要
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作成
以上
参考サイト
- docker-compose で Rails の開発環境を作る
- Docker Compose でローカルの Rails 開発環境を作る
- Docker Compose を使って Sinatra と Redis コンテナを 1 コマンドで立ち上げる
- rails serverコマンドでエラー発生
- 小学生でもわかるRuby on Rails入門
- Rails5でmodelやcontrollerの修正が反映されないやつ
- Railsアプリケーション開発を完全にDocker化する
- Dockerでホストとコンテナ間でのファイルコピー
以上