スポンサーリンク

Docker Desktop for Windowsを試してみる(6)Windows10+WSL2+DockerDesktopでRuby on Rails7+PostgreSQLを環境構築してみる【2022年1月時点】

2022年9月1日

久しぶりにRailsを触ってみたくなったので、Docker-ComposeでRails7環境構築をしてみたいと思います。WindowsでRailsの開発環境を構築する分にはおそらく、以下のやり方の方が簡単です。

今回は、以下のサイトを写経して、わざと、Docker-ComposeでRails環境を構築してみたいと思います。

https://matsuand.github.io/docs.docker.jp.onthefly/samples/rails/

スポンサードリンク

今回構築した環境で再開するときはdocker-compose up -d

docker-compose downでDockerコンテナを止めて、パソコンを終了した後、パソコンを再起動したら、

  • Windows Docker Desktopを起動
  • WSL2のUbuntuを起動
  • cd rails7 && code .
  • VisualStudioCodeが開くので、Ctrl+@でターミナル画面を出す
  • docker-compose up -d
  • WEBブラウザで、localhost:3000/ を開く

となります。なお、rails g scaffold などをしたい場合は、

docker-compose exec web bash

で、webコンテナに入ってから実行します。webコンテナのbashから出るときは、

exit

で出ます。

Docker Desktop for Windows目次

  1. (1)WSL2とWindows Desktopのインストール
  2. (2)Swiftコンテナを作成してSwiftを動かしてみる
  3. (3)Windows10でWindowsとwsl2間でのファイルのコピー
  4. (4)Windows10+WSL2+DockerDesktopでJupyterLab環境構築してみる
  5. (5)Windows10+WSL2+DockerDesktopでWordPressを環境構築してみる
  6. (6)Windows10+WSL2+DockerDesktopでRuby on Rails7+PostgreSQLを環境構築してみる【2022年1月時点】
  7. (7)Windows10+WSL2+DockerDesktop + Ruby on Rails7をHerokuにデプロイ
  8. (8)Railsチュートリアル第4版(Rails5.1)の環境構築【2022年1月時点】
  9. (9)dbコンテナ内のpostgresqlの中身を確認する
  10. (10)ProgateのRubyonRails5学習レッスンの環境構築【2022年1月時点】
  11. (11)Windows10+WSL2+DockerDesktopでRuby on Rails7(TailwindCSS+importmap-rails)+PostgreSQLを環境構築してみる【2022年9月時点】
  12. Windows10+WSL2(Ubuntu20.02)でRails7+tailwindcss+jsbundling-rails環境構築【2022年9月時点】

開発環境

Windows 10 Pro 21H1
Hyper-Vを有効化
Windows Docker Desktop 4.0.0
VisualStudioCode (wsl用の拡張機能インストール済み)

WSL2 Ubuntu 20.04 LTS
VisualStudioCode (+拡張機能 )

『Wndows Docker Desktop』+『WSL2のUbuntu』+VSCodeのセットアップについては「Docker for Windowsを試してみる(1)WSL2とWindows Desktopのインストール」をご参照ください。

Docker-ComposeでRails7を構築するときの流れ

  1. 目標は、webコンテナ(Railsの入ったコンテナ)と、dbコンテナ(PostgreSQLの入ったコンテナ)を作成し、連携すること
  2. 5つのファイル(Dockerfile, Gemfile, Gemfile.lock, entrypoint.sh, docker-compose.yml)を作成
  3. Dockerfileを元にしてwebコンテナ用のイメージ(設計図)を作成
  4. ただし、webコンテナを作成するときに、毎回、「Rails に対応したファイル server.pid が存在しているかもしれないので削除する。」ために、entrypoint.shを実行するようにしておく
  5. Gemfile, Dockerfileを修正したら、毎回、docker-compose build
  6. データベースとしてpostgresqlを用いるためにconfig/database.ymlを書き換える
  7. docker-compose upでwebコンテナ(上で作ったイメージを元に作成)と、dbコンテナ(DockerHubにあるイメージimage: postgresを元に作成)を作成し、連携
  8. railsのデータベースを作成するため(?)にdocker-compose run web rake db:create
  9. ブラウザでlocalhost:3000を開く
  10. アプリを止めるときはdocker-compose down
  11. アプリを再開するときはdocker-compose up
  12. Gemfile や Compose ファイルを編集したときは、以下のように再ビルドが必要。
docker-compose run web bundle install
docker-compose down
docker-compose up --build -d

WindowsのスタートボタンからDocker Desktopを起動

私の場合は、起動すると、以下のような画面になりました。

WSL2でVisualStudioCodeを起動

Windowsの『スタート』>『Ubuntu 20.04 LTS』をクリックして、WSL2のUbuntuを起動します。

以下を入力して、VisualStudioCode(Windows上にありますが、WSL2のUbuntuで動かしている?)を起動します。

mkdir rais7
cd rails7
code .

すると、VisualStudioCodeが開きます。

Ctrl+@ でターミナル画面を出して、試しに、docker version を入力すると、以下のようになります。

5つのファイル(Dockerfile, Gemfile, Gemfile.lock, entrypoint.sh, docker-compose.yml)を作成

以下の5つのファイルを作成します。

  • Dockerfile
  • Gemfile
  • Gemfile.lock ← 空(から)のファイル
  • entrypoint.sh
  • docker-compose.yml

Dockerfileを元にしてwebコンテナ用のイメージ(設計図)を作成

上図の赤で囲んだ部分になります。

VisualStudioCodeのターミナル画面で、以下を入力します。

docker-compose run --no-deps web rails new . --force --database=postgresql
ls -l
docker-compose build

なお、Gemfile, Dockerfileを修正したら、毎回、"docker-compose build"が必要だそうです。

約1分くらいかかりました。なんかたくさんファイルが作成されました。

これ、webコンテナのimageを作成しているたけのはずなのに、ファイルが何個もたくさん作成されています。個人的に、Dockerの「image イメージ」(設計図)というものがよくわかりません。とりあえず、進めます。

データベースとしてpostgresqlを用いるためにconfig/database.ymlを書き換える

以下のように書き換えます。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

(変更前)

(変更後)

変更して保存しようとすると、以下のようなエラーが出ました。

現在は、Linux(WSL2, Ubuntu)上でDockerを使用していることになっているようなので、こちらに従い、以下を入力します。(WSL2のrootパスワードの入力を求められます。)

 sudo chown -R $USER:$USER .

再度、修正したconfig/database.ymlを保存(Ctrl + S)しようとしたら、今度はうまくいきました。

docker-compose upでwebコンテナ(上で作ったイメージを元に作成)と、dbコンテナ(DockerHubにあるイメージimage: postgresを元に作成)を作成し、連携

以下を入力します。

docker-compose up

1分以内に起動しました。

この時点で、Windowsのブラウザから、http://localhost:3000/ にアクセスすると、以下のような真っ赤なエラー画面が出ます。

別の端末からrake:db createでデータベースを作成

現時点で、webコンテナとdbコンテナが起動しているのですが、別のターミナル画面を作って、そちらから、データベース作成のコマンドを入力します。

まず、下図のように、VisualStudioCodeのターミナル画面の右上の方にある、「+」ボタンをクリックします。

すると、以下のように新しいターミナル画面(「端末」というのでしょうか?)が開くので、以下を入力します。

docker-compose run web rake db:create

再度、 Windowsのブラウザから、http://localhost:3000/ にアクセスすると、無事、Rails7の画面が表示されました。とりあえずほっとしました。

なお、このとき、Windows Docker Desktopを見ると、以下のようになっていました。動いているコンテナが2つなのはよいのですが、動いていないコンテナが3つもできています。大丈夫かな、、、

アプリを停止するときはdocker-compose down

ターミナル画面に

docker-compose down

を入力すると、以下のようになり、webコンテナ、dbコンテナともに停止します。

あれ、全部Removeされてしまったけど大丈夫でしょうか?

アプリを再開するときはdocker-compose up -d

パソコンを起動して、Railsアプリを再開するときは、以下のような手順になります。

  1. Windows Docker Desktopを起動
  2. WSL2を起動して、"cd rails7 && code ."を入力
  3. VisualStudioCodeが開くので、Ctrl+@でターミナル画面を出して、"docker-compose up"を入力
  4. Windowsのブラウザから、http://localhost:3000/ にアクセス
cd rails7 && code .
code .
docker-compose up

さすがdocker, あっという間に起動しました。

止めるときは、ちょっと不思議なのですが、別のターミナル画面を開いて、

docker-compose down

となります。(おそらく、そのままのターミナル画面で"Ctrl+C"すると、webコンテナのみが停止して、ちょっとだけややこしくなりそうです。まだ試していませんが、開発中に、思わずCtrl+Cを押してしまうことはありそうです。)

(追記)

docker-compose up -d

の方が楽です。こちらがお勧めです。

Gemfile や Compose ファイルを編集したときは、再ビルドが必要

Gemfile や Compose ファイルを編集したときは、以下を入力して、再ビルドが必要だそうです。まだ試していません。

docker-compose run web bundle install
docker-compose up --build

Dockerで構築したRailsではrailsコマンドを用いる場合はdocker-compose execしてコンテナに入ってから行う

https://alterbo.jp/blog/ryu3-2106/Docker+MySQL+Railsの開発環境を作る2021.06.21

rails -v などを、そのままWSL2のターミナル画面に入力しても、以下のようなエラーが出ます。だって、RailsはDockerのコンテナ内にあるので、当然といえば当然なのです。

rails -v や、rails g scaffold などをしたい場合は、docker-compose upでコンテナ起動後、以下のようにして、Railsのコンテナ(上記のdocker-compose.ymlの記載であれば、webコンテナ)に入ってから、コマンドを入力する必要があります。

docker-compose exec web bash

docker-compose execは、以下のように使用するそうです。

docker-compose exec コンテナ名 実行コマンド

これで、ようやく開発ができそうです。

参考文献

https://zenn.dev/az/articles/6e2a421f7a32446d827f

https://qiita.com/na-777/items/fcccb48b4f3b549abe61

https://qiita.com/kodai_0122/items/795438d738386c2c1966

https://matsuand.github.io/docs.docker.jp.onthefly/samples/rails/

https://qiita.com/fuku_tech/items/dc6b568f7f34df10cae7
更新日 2019年04月01日
DockerでRailsの環境構築してHerokuへデプロイする

https://qiita.com/at-946/items/6958b1d35330c87b8e50

https://programmingmemo.com/docker-rails-heroku/
Dockerで環境構築したRailsをHerokuにデプロイする方法-前編
2021年5月4日

スポンサーリンク