今回構築したい環境
- 既存のRailsのWebアプリをdocker化し、docker-compose upでRailsプロセスとdbが起動し、http://localhost:3000 でこのwebアプリにアクセスできるようにする。
- Rubyのバージョンは3.2.2を使用する。
- DBはpostgresを使用し、バージョンは12を使用する。
- ホストのファイルシステムとコンテナのファイルシステムを同期している。
Dockerfileを作成
①下記のLinuxコマンドを実行し、空のDockerfileを作成します。
$ touch Dockerfile
②作成したDockerfileに以下のようなDockerコマンドを記述していきます。
FROM ruby:3.2.2
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install
docker-compose.ymlを作成
①下記のLinuxコマンドを実行し、空のdocker-compose.ymlを作成します。
$ touch docker-compose.yml
②作成したdocker-compose.ymlに今回構築したい環境の情報を記述していきます。
version: '3'
volumes:
db-data:
services:
# railsの設定
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
environment:
- 'DATABASE_PASSWORD=postgres'
volumes:
- '.:/rails-docker'
ports:
- '3000:3000'
tty: true
stdin_open: true
depends_on:
- db
links:
- db
# postgresqlの設定
db:
image: postgres:12
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
database.ymlに環境情報を追記
①config/database.ymlの中のdefault: &defaultに以下を追記します。
host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
docker imageをビルド
①下記のコマンドを実施し、docker imageをビルドします。
$ docker-compose build
docker-compose upでコンテナを起動
①下記のコマンドを実施し、コンテナを起動します。
$ docker-compose up
DB 作成
①下記のコマンドを実施し、DBを作成します。
$ docker-compose run web rake db:create
migrate を実施
①下記のコマンドを実施し、DBのmigrate を実施します。
$ docker-compose exec web bash
$ rails db:migrate
localhostにアクセスする
①http://localhost:3000/ にアクセスしてrailsの画面が表示されていれば成功です。