1. 概要
Railsアプリの開発をローカル環境上で一通り終えたので、Dockerに慣れるためにローカル環境上にDockerコンテナを立てて、コンテナ上で稼働しているRailsアプリにローカル上からアクセスしてみる。
2. 用意するファイル
Dockerfile
Dockerfile
#ベースイメージとしてrubyを指定
FROM ruby:3.3.3
#作業ディレクトリの指定
WORKDIR /app
#アプリケーションコードがローカルのalcoholの配下にあるため、コンテナのapp配下にコピー
#alcoholはアプリ名
COPY alcohol /app
#コンテナ内にコピーしたGemfileを用いてbundel install
RUN bundle config --local set path 'vendor/bundle' \
&& bundle install
docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
web:
build: .
command: bundle exec rails s -p 8000 -b '0.0.0.0'
volumes:
- ./alcohol:/app
ports:
- "8000:8000"
environment:
RAILS_ENV: development
DATABASE_URL: postgres://postgres:password@db:5432/Alcohol_development
depends_on:
- db
database.yml
hostの値にはdocker-compose.yml上で定義したデータベース用コンテナのサービス名と同一のものを設定する。
database.yml
default: &default
adapter: postgresql
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
encoding: utf8
username: Alcohol
password:
host: db
development:
<<: *default
# database: db/development.sqlite3 変更
database: Alcohol_development
test:
<<: *default
# database: db/test.sqlite3 変更
database: Alcohol_test
production:
<<: *default
# database: db/production.sqlite3 変更
database: Alcohol_production
username: Alcohol # 追加
password: <%= ENV['ALCOHOL_DATABASE_PASSWORD'] %> # 追加
Gemfile
割愛。「gem "rails"」はRailsを利用するために必須だが、そのほかはアプリで使用するものを記述しておく。
3. ディレクトリ構成
environment
├─ Dockerfile
├─ docker-compose.yml
├─ alcohol
├─ ・・・・ #Railsアプリが定義されている
4. 実行順序
①Dockerイメージのビルド
bash
docker-compose build
②Dockerイメージがビルドされたことを確認
bash
docker images
③データベースを作成
bash
docker-compose run web rails db:create
④データベースのマイグレーション
bash
docker-compose run web rails db:migrate
⑤コンテナの起動
bash
docker-compose up
⑥Railsアプリにアクセスする
https://http://localhost:8000
へアクセスし、アプリが表示されることを確認する。
5. 結果
ローカル環境上のDockerコンテナ上で起動したRailsアプリにアクセスすることができた。