DockerもRubyも全く知らない初心者が、Docker for Windowsで色々弄ってみて何とかサマになったので、一緒に作業している同期に共有するためにもメモとしてまとめる感じの記事
Windowsでdockerを動かそうとしたものの、色々手こずって時間を無駄にしてしまったので、システムとして必要な部分が用意できるまでの作業手順をメモ代わりに投稿
Docker for Windowsで「Yay! You're on Rails!」を出すまで
1. docker for Windowsをインストール
導入手順はこの記事では省略。
注意点としてはHyper-Vの有効化を忘れないでください。
--追記--
どうやらdocker for windowsに必要なHyper-Vは、windows proでしか有効化できないようです。proではない方はdocker toolboxを使ってください。
2. RubyとMySQLのイメージをインストール
Dockerが動いていれば、イメージは以下のコマンドで落とせます。
docker pull ruby:2.5.0
docker pull mysql
詳しい説明はこちらの記事で
https://qiita.com/togana/items/30b22fc39fe6f7a188ec
3. Dockerの環境構築
Dockerfile・docker-compose.yml・Gemfile・Gemfile.lockが必要
詳しい書き方は、この記事が分かりやすかったです
https://qiita.com/wMETAw/items/8cb41425a5d0bdace2df
4.Railsアプリを作成
docker-compose run web rails new [app_name] --database=mysql --skip-bundle
5.Docker起動
build & 起動
docker-compose build
docker-compose up -d
build時にbundle installで詰まった場合は、SettingsからShared Drivesを有効化したり、firewallを無効にしたり、Dockerを再起動したり、色々試してみてください。
6.Yay! You're on Rails!
(3で紹介した記事通りにdocker-compose.ymlを設定した場合は)localhost:3000にアクセスすれば「Yay! You're on Rails!」の画面が出るはず
サーバーの起動が確認できた後は、
docker-compose down
でキチンとコンテナを停止させましょう。
ページを作成するまで
localhost:3000にトップページを作る場合の話
1.controllerの作成
これでlocalhost:3000/home/topが自動生成される
rails g controller home top
# rails g controller コントローラ名 アクション名
2.viewの作成
./app/views/homeの中にあるtop.html.erbがHTMLソース(厳密にはHTMLではないが)
表示したいようにtop.html.erbを編集する
3.routingの設定
./configの中にあるroute.rbを以下のように編集する
Rails.application.routes.draw do
get "/" => "home#top"
end
これでlocalhost:3000/homeにアクセスした時に、top.html.erbが表示されるようになる
データベースが使えるようになるまで
※参考
https://qiita.com/nak1114/items/1f7d48ff661555726427
https://www.rubylife.jp/rails/ini/index6.html
特に二つ目は凄く分かりやすい記事なので、初学者は読んだ方が良いです。
1. Databaseの永続化
Databaseを永続化させないと、buildする度にデータが吹っ飛びます。
永続化は、docker-compose.ymlのdatabaseコンテナの設定に以下を追加する。
volumes:
- mysql-data:/var/lib/mysql
portsの設定も追加しましょう
2. Databaseの作成
まずはDBの作成
docker-compose run --rm web rake db:create
これで./dbに色々ファイルが作成される
--追記--
今はrakeコマンドを使うのは古いそうなので、railsコマンドで叩いた方が良いそうです。
docker-compose run --rm web rails db:create
次にmodelの作成
docker-compose run --rm web rails g model [model_name]
これで./db/migrateにマイグレーションファイルが作成される
次にテーブルの定義
作成されたマイグレーションファイルに、テーブルの定義を追記する。
class CreateBooks < ActiveRecord::Migration[5.1]
def change
create_table :model_name do |t|
t.string :name //ココ
t.timestamps
end
end
end
t.timestampsは色々便利なので、消さない方が良いです。
最後に、マイグレーションファイルに従ってマイグレーション
docker-compose run --rm web rails db:migrate
おわりに
他にも必要そうな事があったら追記しようと思います。
追記 2018/06/13
https://qiita.com/chocode/items/61b91aa0e08637a8ad91
続編を書きました。DBにデータを入力するための入力フォームの作り方です。