4
7

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 3 years have passed since last update.

Docker rails mysqlで環境構築!

Last updated at Posted at 2020-05-12

5/14追記 railsのバージョンをGemfileで指定する方法を追加しました。

今回はDockerにrails、MySQLの環境構築を行いました。

##Dockerはdocker-for-macを使用しています

・Docker version 19.03.8
・ruby version 2.5.3
・rails version 5.2.4.2
・MySQL version 8.0.13

こちらの環境を構築していきます。

###1、まずはディレクトリを作成します
今回はDockerディレクトリを作成し
その中にsampleディレクトリを作成しました。

sampleはアプリの名前になります。

こんな感じ↓

% pwd
/Users/hoge/Docker/sample

###2、コードエディターを開きます

sampleディレクトリに入り
・Dockerfile
・docker-compose.yml
を作成します。

ターミナル
sample % ls
Dockerfile  docker-compose.yml

こんな感じになってると思います。↑

##3、Dockerfileに記述をしていきましょう!

Dockerfile

FROM ruby:2.5.3                           
#rubyのバージョン指定
RUN gem install rails
#gemのインストール
RUN apt-get update && apt-get install -y nodejs mysql-client
#パッケージのアップデート インストール

##4、docker-compose.ymlに記述していきましょう!

docker-compose.yml
version: '3'
services:           
  mysql:           #コンテナの名前(なんでもok)
    image: mysql:8.0.13
    command: --default-authentication-plugin=mysql_native_password 
                   #MySQL -v8.0から認証方式が変更されたので、mysql -v5.0に合わせるプラグイン
    volumes:  
      - "./mysql-data:/var/lib/mysql"  
                   #ローカルのmysql-dateにデータを保存する(コンテナが消えてもデータが残る)
    environment:
      MYSQL_ROOT_PASSWORD: root



  app:               #コンテナの名前(なんでもok)
    build: .         #Dockefileを指定
    volumes:         #dockerコンテナ内のファイルをローカルで編集する為の記述
      - ".:/app"
    ports:           #localhost:3000にアクセスすると、コンテナ内の3000ポートにアクセスする
      - "3000:3000"
    tty: true
    depends_on: 
      - mysql        #mysqlコンテナにアクセスする
    working_dir: "/app" #コンテナに入った時に直接appディレクトリに入る
    


##5、Dockerを起動しましょう!

ターミナル
sample % docker-compose up
Creating network "sample_default" with the default driver
Creating sample_mysql_1 ... done
Creating sample_app_1   ... done

こんな感じになっていると思います。
dockerがインストールされていれば、dockerが立ち上がるはずです。
sampleとmysqlのコンテナが作られているのが分かると
思います。

##6、コンテナに入っていきましょう!
ターミナルで
(command+T)で別タブを開きましょう。

ターミナル
sample % docker exec -it sample_app_1 /bin/bash
root@*********:/app# pwd
/app

コンテナに入れたら、/appディレクトリに居てるのがわかります。

##7、rails newをしていきましょう!

今回は、railsのバージョンを指定したいので、指定できるバージョンを確認しましょう。

ターミナル

root@*********:/app# gem list rails

*** LOCAL GEMS ***

rails (6.0.3)

今回はrails (5.2)系を使用します。
該当するバージョンが無いのでインストールしましょう。

ターミナル

root@*********:/app# gem i -v 5.2.0 rails

インストールが出来たら、確認してみましょう。

ターミナル

root@*********:/app# gem list rails

*** LOCAL GEMS ***

rails (6.0.3, 5.2.0)

インストールが確認出来たと思います。

それでは、バージョンを指定してrails newをして行きましょう!

ターミナル

root@*********:/app# rails _5.2.0_ new .

これで、sampleディレクトリにrailsのファイル類が出来たと思います。

ターミナル
root@*********:/app# ls                
Dockerfile  Gemfile.lock  Rakefile  bin     config.ru  docker-compose.yml  log	       package.json  storage  tmp
Gemfile     README.md	  app	    config  db	       lib		   mysql-data  public	     test     vendor

このままbundle installして行きましょう

ターミナル

root@*********:/app# bundle install

ここまで来れればもう少し!

##8、rails serverを立ち上げましょう!

ターミナル

root@*********:/app# rails s -b 0.0.0.0

rails serverが立ち上がれば、いつも通り
localhost:3000
で確認してみましょう!
スクリーンショット 2020-05-13 2.23.19.png

こうなればOKですね!

##8、MySQLの設定をして行きましょう!
まずはGemfileを編集しましょう!
(sqlite3)になっているので,(mysql2)
に書き換えましょう!

Gemfile

gem 'sqlite3' <-削除します
gem 'mysql2'

書き換えたらbundle install

ターミナル

root@*********:/app# bundle install

##9、database.ymlを編集しよう!

:database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password: root
  host: mysql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: rails_app_development


test:
  <<: *default
  database: rails_app_test

production:
  <<: *default
  database: rails_app_production


編集が出来れば、DBを作成します!

ターミナル

root@*********:/app# rails db:create

##10、mysqlに入って確認してみましょう!

ターミナル

root@*********:/app# mysql -u root -proot -h mysql

MySQL [(none)]> show datebases;

+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| mysql                 |
| performance_schema    |
| sample_development   |
| sample_test          |
| sys                   |
+-----------------------+

こんな感じになっていればOKです!

お疲れ様でした!
ここからはいつも通り、開発を進めて行けばOKです。:relaxed:

Docker環境構築の方法は色々ありますが。
個人的にはこの方法が理解しやすかったので。
記事にしてみました。

docker hubにimageがあるので
好きな、バージョンを集めて環境構築をしてみて下さい。

間違いなどあれば、指摘していただけると幸いです:smile:

##追記 railsのバージョンをGemfileで指定する方法

・Dockerfile
・docker-compose.yml(上記と同じ)

を作成し、そのまま

・Gemfile
・Gemfile.lock
を作成します。

###Dockerfileを編集

Dockerfile

FROM ruby:2.5.3                         
#rubyのバージョン指定
RUN gem install rails
#gemのインストール
RUN apt-get update && apt-get install -y nodejs mysql-client
#パッケージのアップデート インストール

COPY Gemfile /Gemfile
COPY Gemfile.lock /Gemfile.lock
#ローカルのファイルをコンテナにコピー
RUN bundle install

###Gemfileを作成

Gemfile

source 'https://rubygems.org'
gem 'rails', '~> 5.2.0'

###Gemfile.lockを作成

Gemfile.lock
#記述は不要

###Dockerの起動

ターミナル
sample % docker-compose up

###コンテナに入ります

ターミナル
sample % docker exec -it sample_app_1 /bin/bash
root@*********:/app# pwd
/app

###rails new
プロジェクトを指定して、rails new

ターミナル
root@*********:/app# bundle exec rails new . 

###必要であれば

ターミナル
root@*********:/app# bundle update

ここからは、同じですので。
8、rails serverを立ち上げる所から進めて下さい!

以上です:relaxed:

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?