はじめに
皆さん、おはこんばんちは。
新谷@diffeasyです。
今回は、タイトルの通りDockerを導入、Railsのデフォルトページを表示するまでを書いていこうと思います。
開発/本番環境の構築までは、カバーしていません。
今回の環境
- macOS Sierra 10.12.6
- Docker version 17.09.1-ce, build 19e2cf6
Docker導入
https://www.docker.com/community-edition#/download
↑からご自分のOSにあったモノをダウンロード、インストールしてください。
または、Homebrew Caskでインストールしてください。
$ docker -v
Docker version 17.09.1-ce, build 19e2cf6
バージョンが出れば導入は完了です。
今回は説明しませんが、Docker Hubでimageを公開することが出来ます。
その場合は、アカウントを作成する必要があります。
Dockerfile作成
https://docs.docker.com/compose/rails/#define-the-project
↑に、導入手順が載っていますがそのままだと面白くないので、Alpineを使おうと思います。
$ mkdir ~/develop/docker-test
$ vi Dockerfile
FROM ruby:2.4.3-alpine3.7
RUN apk update \
&& apk add --no-cache --virtual build-dependencies build-base gcc wget git mariadb-dev nodejs tzdata \
&& apk add --no-cache bash \
&& mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
こんな感じになりました。
必要なファイルの用意
Gemfileの作成
$ vi Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5.1', '>= 5.1.4'
Gemfile.lockの作成
$ touch Gemfile.lock
docker-compose.ymlの作成
$ vi docker-compose.yml
今回は、DBMSにMariaDBを、ホスト側のポートを4000番にしました。
DBのrootパスワードは適当に。
version: '3'
services:
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: password
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "4000:3000"
depends_on:
- db
イメージの作成
$ docker-compose build
DB接続設定の作成
password
は、 docker-compose.yml
の MYSQL_ROOT_PASSWORD
と同じパスワードにしてください。
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
起動
$ docker-compose up
DBの作成
$ docker-compose run web rails db:create
Starting dockertest_db_1 ... done
Created database 'myapp_development'
Created database 'myapp_test'
確認
ブラウザで localhost:4000
にアクセスしてみてください。
Yay!ページが表示されましたね。
イメージの確認
今回は、Alpineで構築をしたので、容量を確認してみましょう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockertest_web latest 870f797d49bd 14 minutes ago 594MB
ruby 2.4.3-alpine3.7 378163876b18 6 days ago 72.4MB
mariadb latest b1fe0881b739 10 days ago 398MB
alpine latest e21c333399e0 2 weeks ago 4.14MB
dockertest_web
が、ゴール地点でのイメージになります。594MB!
mariadb
が398MBなので、足して1GBいかないくらいです。にしても、DBMSは大きいですね😓
UbuntuやCentOSで、構築すると ruby
だけで700MBほどになるので、それなりにスリムになりましたね。
設定を突き詰めれば、もっと軽くなりそうです。
一番下の alpine
は、驚愕の4.1MB。流石、軽いですね😇
さいごに
今回は、公式ドキュメントに掲載されいているRailsの環境構築を少しアレンジして入門編としてお送りしました。
今のところ、データの永続化など問題があり、このままでは開発環境に使うことは出来なさそうです。
引き続き、勉強を続けてまずは開発環境でDockerが使える様にしたいと思います。
ここまで読んで頂きありがとうございます!