自分用の作業メモとして残します。
(Markdownはあとで修正)
開発環境
Tool | Version |
---|---|
MacOS(Ventura) | 13.0 |
Docker | 20.10.23 |
Ruby | 2.6.4 |
Rails | 6.0.0 |
Docker
Dockerとは
Dockerは、仮想環境を提供するオープンソースソフトウェアです。
設定の容易さや起動の速さなどの理由により、開発者の間でとても人気があります。
Dockerでは、個々の仮想環境をコンテナと呼びます。
コンテナの内容はDockerfileと呼ばれるテキストファイルで記述されます。
このファイルがあればさまざまなOS上でコンテナを復元できます。
- Docker Hubのアカウントを取得し、ログインしてインストーラをダウンロードして使用します。
Docker Composeとは
Dockerを用いてRailsアプリケーションを開発したり、production環境で動かすとき、RubyアプリケーションとDBサーバーを別々のコンテナとして構築するのが一般的です。
Docker Composeはこれらの複数のコンテナをまとめて起動・停止するためのツールです。
コマンド一つ実行するだけで、Webアプリケーションを構成するすべてのコンテナ群が動作します。
Dockerの基本操作
Dockerは2つのコンテナを使用します。
1つではRailsアプリケーションが動き、もう一つではRDBMSのPostgreSQLが動きます。
前者のコンテナをweb、後者のコンテナをdbと呼びます。
$ docker --version # Dockerバージョン確認
$ docker-compose --version # Docker-composeのバージョン確認
$ git clone https://github.com/oiax/rails6-compose.git
$ cd rails6-compose
$ ./setup.sh
$ docker-compose up -d # -dは、コンテナをデーモンとして動かすためのもの
$ docker-compose ps # プロセス状態の確認
$ docker-compose images # imageのリスト表示
$ docker volume ls # volumeのリスト表示
$ docker network ls # networkのリスト表示
$ docker-compose stop #PC電源を落とす前にコンテナ群を停止してください
$ docker-compose exec web bash
$ rails --version #Railsのバージョンを確認
$ exit #webコンテナをログアウト
Railsプロジェクトの作成
$ rails new test-project -d postgresql --skip-test-unit
# -d postgresql・・データベースにPostgreSQLを指定。
# --skip-test-unit・・テストフレームワークとしてTest::Unitの代わりにRSpecを使用するので、Test::Unit関連の生成を省略
Gemfileの修正とbundle install
$ vim Gemfile # インストール対象のgemとバージョンを記入
$ bin/bundle # 適用(bundle installと同じ動作です)
データベースのセットアップ設定と作成
- データベースのconfigです。
- 適切な設定をしないとデータベースとの接続が出来ません。
$ vim database.yml # 編集してインストール対象のgemとバージョンを記入
- webコンテナで次のコマンドを実行すると、データベースが作成されます。
$ bin/rails db:create # データベースの作成
$ bin/rails db:create RAILS_ENV=production # データベースの作成
hostsファイルの設定
127.0.0.1 example.com project.example.com # ループバックにホスト名1,2を設定し名前解決
#(loopback) (ホスト名1) (ホスト名2)
# Dockerの仮想マシン上で動作するRailsアプリケーションに、
# 特定のホスト名でアクセスする必要があるためホスト名を設定する
Blocked Hostsの設定
Rails.application.configure do
config.hosts << "example.com"
config.hosts << "project.example.com"
end
web-consoleの設定
web-consoleはRailsアプリケーションのデバッグツール。
初期状態では127.0.0.1からのアクセスしか受け付けないようになっているため、
Docker環境でrailsアプリケーションを動かして、ホストOS側のブラウザでアクセスするとweb-consoleは応答しない。
この問題を回避するため、config/environmentディレクトリにあるファイルdevelopment.rbを以下のように書き換える。
# (中略)
# 以下を最終行に追加
config.web_console.whitelisted_ips = [ "127.16.0.0/12" ]
end
Webアプリケーションの動作確認
webコンテナ側でrailsアプリケーションを起動します。
$ rails s -b 0.0.0.0
$ rails s -e production -b 0.0.0.0
アプリケーションサーバを起動後、ブラウザを起動しhostsで設定したホスト名1、2のURLでwebサーバにアクセスできるか確認する。
http://example.com:3000
or
http://project.example.com:3000
→「Yay! You're on Rails!」が表示されたら問題なし
また、ターミナルにログが表示されるのでこちらも確認する
Dockerの基本操作
docker-compose upで作られたものを一括削除する
$ docker-compose down --rmi all --volumes
削除されたかを確認しよう