概要
CentOS や Ubuntu よりも軽量な Alipine を使って、Rails の開発環境を Docker for Mac で作成してみます。
Docker for Mac のインストールについては、以下のエントリーをご参照ください。
ハードウェア
- マシン: Macbook Pro Early 2011
- メモリ: 16 GB
- ストレージ: SSD 512 GB
ホスト
ゲスト
Ruby イメージの比較
DockerHub に公式イメージがあるので、Ubuntu と Alpine の Ruby イメージをダウンロードして比較してみます。
https://hub.docker.com/_/ruby/
まずは、Ubuntu
% docker pull ruby:2.3.2
次に、Alpine
% docker pull ruby:2.3.2-alpine
比べてみると
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE ruby 2.3.2-alpine f67322bbee5a 8 weeks ago 126.9 MB ruby 2.3.2 d0f948bdaa95 8 weeks ago 730.1 MB
Alpine が 126.9 MB 、Ubuntu が 730.1 MB 。
Alpine の方が、かなり軽いですね。
作業ディレクトリ作成
名前は任意です。ここでは、hatena01 というディレクトリ名にします。
% mkdir hatena01
MySQL のデータ永続化のため、busybox 用のディレクトリも作っておきます。
% mkdir -p hatena01/datastore-hatena01
Dockerfile
参考 URL
Dockerでruby/alpineを使ってrails+mysql+redisの環境作成 - Qiita
Dockerfile 作成
% vim Dockerfile
FROM ruby:2.3.2-alpine
ENV LANG ja_JP.UTF-8
RUN apk update && \
apk upgrade && \
apk add --update\
bash \
build-base \
curl-dev \
git \
libxml2-dev \
libxslt-dev \
linux-headers \
mysql-dev \
nodejs \
openssh \
ruby-dev \
ruby-json \
tzdata \
yaml \
yaml-dev \
zlib-dev
##### Rails #####
RUN gem install bundler
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
COPY . $APP_HOME
Gemfile
Gemfile 作成
vim Gemfile
source 'https://rubygems.org' gem 'rails'
Gemfile.lock 作成
% touch Gemfile.lock
Docker Compose
docker-compose.yml 作成
% vim docker-compose.yml
version: '2'
services:
web-hatena01:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db-hatena01
container_name: web-hatena01
db-hatena01:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root_password
volumes_from:
- datastore-hatena01
container_name: db-hatena01
datastore-hatena01:
image: busybox
volumes:
- ./datastore-hatena01:/var/lib/mysql
container_name: datastore-hatena01
Rails アプリケーション生成
% docker-compose run web-hatena01 rails new . --force --database=mysql --skip-bundle
JavaScript runtime 用に therubyracer の gem インストールを有効化
参考 URL
Gemfile に追加
以下を追加します。
+ gem 'therubyracer', '0.11.3' + gem 'libv8', '3.11.8.13'
完成形は以下となります。
% cat Gemfile
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
gem 'rails', '~> 5.0.1'
gem 'mysql2', '>= 0.3.18', '< 0.5'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'therubyracer', '0.11.3'
gem 'libv8', '3.11.8.13'
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
group :development, :test do
gem 'byebug', platform: :mri
end
group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '~> 3.0.5'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
ビルド
% docker-compose build
データベース
config/database.yml の設定
% vim config/database.yml
default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: root_password host: db-hatena01 development: <<: *default database: hatena01_development test: <<: *default database: hatena01_test
Docker コンテナ実行
% docker-compose up
DB 作成
ターミナルの別タブを開く
% docker-compose exec web-hatena01 rails db:create
Created database 'hatena01_development' Created database 'hatena01_test'
動作確認
ブラウザで確認
http://localhost:3000 もしくは http://0.0.0.0:3000
Rails「Cannot render console from Allowed networks」と言われたら
参考 URL
Rails「Cannot render console from Allowed networks」と言われたら - Qiita
development.rb
以下を追加。
% vim config/environments/development.rb
config.web_console.whitelisted_ips = '0.0.0.0/0'
停止
docker-compose up したターミナルのタブで Ctl + c を実行。 または、別タブで以下を実行。
% docker-compose stop
再起動
まずは、古いプロセス削除しておく。
% rm -rf tmp/pids/server.pid
そして up する。
% docker-compose up
以上です。