Help us understand the problem. What is going on with this article?

DockerでYay! 〜今更聞けないDocker入門編〜

More than 1 year has passed since last update.

はじめに

皆さん、おはこんばんちは。
新谷@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
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パスワードは適当に。

docker-compose.yml
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.ymlMYSQL_ROOT_PASSWORD と同じパスワードにしてください。

database.yml
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!
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が使える様にしたいと思います。

ここまで読んで頂きありがとうございます!

shintani_dev
株式会社diffeasyでエンジニアをしています。
https://shintani.dev
diffeasy
「世界中の“むずかしい”を簡単に」を経営理念として、オーダーメイドシステムおよび自社サービス(大会運営向上心)を開発・運営
https://diffeasy.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away