💻

Ruby 3.1 と Rails 7 のプロジェクトを Docker内で作成してみる

2022/01/14に公開

必要なもの

  • Docker
  • Visual Studio Code
  • Remote Development 拡張機能

Docker ファイル作成

VS Code で空のフォルダー(rails7)を作成して開き書き内容の Dockerfile を作成

Dockerfile
FROM ruby:3.1

Docker コンテナーを開く

コマンドパレットで Remote Container: Reopen in Container を選択し、From 'Dockerfile' を選択

ruby バージョンの確認

terminal(container)
# ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]

rails をインストール

terminal(container)
# gem install rails

rails バージョンの確認

terminal(container)
# rails -v
Rails 7.0.1

rails プロジェクトを作成

最小限のモジュールのみでAPIモードで作成してみます

terminal(container)
rails new –-minimal --api .

起動

terminal(container)
rails s

ブラウザで起動しているのを確認

http://127.0.0.1:3000/

todos API作成

terminal(container)
# rails g scaffold todo title:string done:boolean
this noun before running the generator.
      invoke  active_record
      create    db/migrate/20220114053127_create_todos.rb
      create    app/models/todo.rb
      invoke    test_unit
      create      test/models/todo_test.rb
      create      test/fixtures/todos.yml
      invoke  resource_route
       route    resources :todos
      invoke  scaffold_controller
      create    app/controllers/todos_controller.rb
      invoke    resource_route
      invoke    test_unit
      create      test/controllers/todos_controller_test.rb
terminal(container)
# rails db:migrate
== 20220114053127 CreateTodos: migrating ======================================
-- create_table(:todos)
   -> 0.0084s
== 20220114053127 CreateTodos: migrated (0.0085s) =============================

テスト実行

terminal(container)
# rails test
Running 5 tests in a single process (parallelization threshold is 50)
Run options: --seed 29841

# Running:

.....

Finished in 0.384882s, 12.9910 runs/s, 18.1874 assertions/s.
5 runs, 7 assertions, 0 failures, 0 errors, 0 skips

デプロイ用に Dockerfile を修正

Dockerfile
FROM ruby:3.1
WORKDIR /workspaces/rails7
COPY Gemfile* /workspaces/rails7
RUN bundle install
COPY . /workspaces/rails7
CMD rails s -b 0.0.0.0

Docker イメージ作成

terminal(local)
% docker build -t rails7 .

Docker イメージを起動

terminal(local)
% docker run -p 3000:3000 rails7                                     
=> Booting Puma
=> Rails 7.0.1 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.1.0-p0) ("Zawgyi")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 8
* Listening on http://0.0.0.0:3000
Use Ctrl-C to stop

以上

Discussion