4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

diffeasyAdvent Calendar 2017

Day 22

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

Last updated at Posted at 2017-12-22

はじめに

皆さん、おはこんばんちは。
新谷@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が使える様にしたいと思います。

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

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?