既存のrailsアプリをdocker化する方法
はじめに
今回はDockerとdocker-composeについて学習したので既存のrailsアプリをdocker化する方法についてまとめます。
前提としてDocker、docker-composeはインストール済みとして進めていきます。
docker化までの流れ
以下の流れでdocker化を行います。
- Dockerfile、docker-compose.ymlファイルを作成&編集
- database.ymlファイルの編集
- コンテナの立ち上げ&起動
- アクセスできるかを確認
Dockerfile、docker-compose.ymlファイルを作成&編集
railsのプロジェクト直下にDockerfile、docker-compose.ymlファイルを作成します。
Dockerfileに対し以下のように記述を行います。
FROM ruby:3.2.2 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /rails_docker WORKDIR /rails_docker ADD Gemfile /rails_docker/ ADD Gemfile.lock /rails_docker/ RUN bundle install ADD . /rails_docker
docker-compose.ymlに対し以下のように記述します。
version: '3' volumes: db-data: services: db: image: postgres:12 environment: POSTGRES_PASSWORD: password volumes: - 'db-data:/var/lib/postgresql/data' web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/rails_docker ports: - "3000:3000" depends_on: - db
docker-compose.ymlについて復習も兼ねて記載内容を解説します。
volumes: db-data:
db-dataという名前のボリュームを定義しています。
通常コンテナを破棄した際にコンテナで作成したデータは破棄されますがボリュームを設定することにより、ホスト側にデータを保存することができます。
定義したボリュームを他のコンテナからも参照することによりテストデータなどの共有を行うことができます。
services: db: image: postgres:12 environment: POSTGRES_PASSWORD: password volumes: - 'db-data:/var/lib/postgresql/data'
services:
でdbというサービス名を定義しています。
image:
でビルドするイメージを指定しています。
environment:
でコンテナに定義する環境変数を定義しています。
volumes:
でボリューム:マウントするディレクトリ
の記法でフォルダをマウントしています。
web: build: . command: > sh -c ' rails db:create && rails db:migrate && bundle exec rails s -p 3000 -b '0.0.0.0' ' volumes: - .:/rails_docker ports: - "3000:3000" depends_on: - db
build: .
でホスト側に配置されたDockerfileをイメージに指定することができます。(.でカレントディレクトリのDockerfileが指定されています。)
command:
でコンテナの環境で記載したコマンドを実行することができます。 (ポート番号3000番でローカルホストのブラウザに表示します。)
volumes: - .:/rails_docker
ボリュームが指定されていませんがこれはバインドマウントと言います。
ホスト側のカレントディレクトリとコンテナ側のrails_dockerディレクトリをマウントしています。
これによりコンテナ側のソースコードの変更などをホスト側でも確認することができます。
depends_on: - db
サービスの依存関係を表しており、dbを起動してからwebを起動することを表しています。
database.ymlファイルの編集
rails_docker/config/database.ymlに対し以下のように編集します。
default: &default adapter: postgresql encoding: unicode host: db username: postgres password: password # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
変更点は以下の通りです。
db:
の追加username:
の追加password:
の追加
コンテナの立ち上げ&起動
以上の手順で準備ができたのでコンテナの立ち上げ&起動 を行います。
#イメージしてコンテナの立ち上げ&起動 docker-compose up -d --build #初回のみDBを作成する。 docker-compose run web rails db:migrate #初回&DB定義変更時にmigrate実行 docker-compose run web rails db:migrate
アクセスできるかを確認
http://localhost:3000/にアクセスしてアプリ画面が確認できれば完了です。
おわりに
以上既存のrailsアプリをdocker化する方法でした。
Dockerを使用することにより環境構築が楽になることを実感できました。
ご閲覧いただきありがとうございました。