1. Qiita
  2. 投稿
  3. docker

Dockerでruby/alpineを使ってrails+mysql+redisの環境作成

  • 26
    いいね
  • 2
    コメント

Dockerでruby環境作る際に、慣れ親しんだcentosを使用してゴリゴリとDockerfileを書いていたのですが、重すぎるのでalpineに変更しました
(あとdockerでcentos使うとsystemd問題がしんどい)

alpineについてはこちらを参照してください

Alpine LinuxでDockerコンテナ開発を加速する
http://dev.classmethod.jp/tool/docker/apline-accelerates-docker-dev/

Dockerfileとdokcer-composeはこちらにおいてあります
https://github.com/megaya/alpine_rails

Dockerfile

こちらのgithubを参考にしています
参考というかほぼ丸パクリです
https://github.com/alim/alpine-rails

FROM ruby:2.3.1-alpine
ENV BUILD_PACKAGES="curl-dev ruby-dev build-base bash" \
    DEV_PACKAGES="zlib-dev libxml2-dev libxslt-dev tzdata yaml-dev mysql-dev" \
    RUBY_PACKAGES="ruby-json yaml nodejs"


RUN apk update && \
    apk upgrade && \
    apk add --update\
    $BUILD_PACKAGES \
    $DEV_PACKAGES \
    $RUBY_PACKAGES && \
    rm -rf /var/cache/apk/* && \
    mkdir -p /usr/src/app


WORKDIR /myapp
COPY . /myapp
EXPOSE 3000
RUN gem install nokogiri -- --use-system-libraries && \
    gem install rails --pre && \
    bundle install && \
    bundle clean

CMD ["rails", "s", "-b", "0.0.0.0", "-p", "3000"]

alpineではapkという独自のパッケージ管理を使用します
bundle instalしたときにnokogiriでエラーが発生したので、先にgemで入れています

postgresやsqliteなどを使用する場合は、mysql-devをそれぞれのdevパッケージに変更してください

docker-compose.yml

data volumeにはbysyboxを使用し、mysqlやredisは公式のものをそのまま使っています

docker-compose.yml
version: '2'
services:
  data:
    image: busybox
    volumes:
      - /var/lib/mysql
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes_from:
      - data
    environment:
      MYSQL_ROOT_PASSWORD: password
  redis:
    image: redis:3.2.0-alpine
  web:
    build: .
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    environment:
      DB_PASSWORD: password
      DB_HOST: mysql
      REDIS_HOST: redis
    links:
      - mysql
      - redis

railsで使用する

Dockerfiledokcer-compose.ymlと同じ階層にrailsのプロジェクトを配置してください
以下のようになると思います。今回はこのディレクトリをそのままdockerにマウントさせます

├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── log
├── public
├── test
├── tmp
└── vendor

database.yml

以下のように書き換えます
パスワードとローカルホストを分岐させている理由は、localhostでdatabaseを使いたい場合もあるかな?という念のための考慮です

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: <%= ENV['DB_PASSWORD'] || "your_password" %>
  host: <%= ENV['DB_HOST'] || 'localhost' %>

起動

$ docker-compose up

一回目の起動時のみ下記でデータベースを作成する

$ docker-compose exec web rails db:create

参考

Alpine LinuxでDockerコンテナ開発を加速する
http://dev.classmethod.jp/tool/docker/apline-accelerates-docker-dev/

github(alim/alpine-rails)
https://github.com/alim/alpine-rails

Comments Loading...