LoginSignup
18
21

More than 5 years have passed since last update.

Docker で Ruby on Rails の開発環境を作ってみた

Last updated at Posted at 2019-02-24

はじめに

既存のが沢山あるけど、自分でも書いてみた
自分用のメモ書き

目標

とりあえず Rails の Welcome ページの表示。
db は MySQL

主に、以下を参考にしました

1. 最初のファイル作成

Dockerfile
FROM ruby:2.6.1
RUN apt-get update -qq && apt-get install -y vim nodejs mysql-client
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
COPY . /myapp
ENV APP_HOME /myapp
RUN mkdir -p ${APP_HOME}
WORKDIR ${APP_HOME}
ADD . ${APP_HOME}
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
$ touch Gemfile.lock   # 空っぽ
docker-compose.yml
version: '2'
services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

2. アプリの立ち上げ

同じく公式に書いてありました。

$ docker-compose run web rails new . --force --no-deps --database=mysql
~~
$ docker-compose build

わ。めっちゃ動いた...嬉しい。
Installing nokogiri が懐かしい
15分くらい待ったら終わりました。

3. db の向きを変える

rails new ~ 後の Rails は「データベースサーバーはローカルにあるんだよね?」って思ってるみたいです。
違うよ。コンテナだよ。なので、
docker-compose.yml に記載した サービスの db コンテナであることを教えてあげる

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password # これはあとでなんとかしないといけない
  host: db # ローカルから DB してあげる

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

4. 起動

ここまでやったら Docker を起動してみる

$ docker-compose up
# 別のウインドウを用意して
$ docker-compose run web rake db:create

そしたら http://localhost:3000/ に接続!!

あれ?なんで?エラーじゃん。

Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

とりあえずエラーメッセージでググる。
ヒットした
とりあえず真似てみる

mysql-confd/default_authentication.cnf
[mysqld]
default_authentication_plugin= mysql_native_password
docker-compose.yml
db:
#~~
    volumes:
      - ./mysql-confd:/etc/mysql/conf.d

実施した イメージ/コンテナの削除の方法
ただ、全削除する必要は全くなかったと思った...。
のでやらない方がいいです。
また15分くらいかかってしまう...

$ docker-compose build
$ docker-compose up

おそらくさっき全削除した中で使うものを再インストールしているのだろう...。

えぇぇ...またエラー出た。

Unknown database 'myapp_development'

あっ・・・(察し)

$ docker-compose run web rake db:create

これで文句ないだろう!!

image.png

やったぜ!

今後やりたいこと。

Todo アプリを作ってみる。trello のようなやつ
(もうちょっと考えたやつ作ってみたい)
mysql-confd/default_authentication.cnf なにやってんのか調べる
パスワードむき出しなのを何とかする

学んだこと

公式読むって大事
書き残すって大事

なので、Todo アプリ作るなら作るで記事を書く。

18
21
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
18
21