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に記述をしていきましょう!
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に記述していきましょう!
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
で確認してみましょう!
こうなればOKですね!
##8、MySQLの設定をして行きましょう!
まずはGemfileを編集しましょう!
(sqlite3)になっているので,(mysql2)
に書き換えましょう!
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です。
Docker環境構築の方法は色々ありますが。
個人的にはこの方法が理解しやすかったので。
記事にしてみました。
docker hubにimageがあるので
好きな、バージョンを集めて環境構築をしてみて下さい。
間違いなどあれば、指摘していただけると幸いです
##追記 railsのバージョンをGemfileで指定する方法
・Dockerfile
・docker-compose.yml(上記と同じ)
を作成し、そのまま
・Gemfile
・Gemfile.lock
を作成します。
###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を作成
source 'https://rubygems.org'
gem 'rails', '~> 5.2.0'
###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を立ち上げる所から進めて下さい!
以上です