既存のRuby on Railsプロジェクトの実行環境をDockerで構築する方法
既存のRuby on Railsプロジェクトの実行環境をDockerで構築する方法をまとめます。
環境構成
- version
- Ruby: 3.0.2
- Node.js: 16.15
- Yarn: 1.22.19
- DB
- PostgreSql: 12
1. Dockerfileの作成
まず、Dockerイメージ作成のためのDockerfileを作成します。
プロジェクトフォルダ直下にDockerfileを作成し、記述を行います。
今回、マルチステージビルドを使用して、イメージサイズを抑えるようにします。
FROM node:16.15-stretch as node FROM ruby:3.0.2 # yarnとnodeのインストール ENV YARN_VERSION 1.22.19 RUN mkdir -p /opt COPY --from=node /opt/yarn-v$YARN_VERSION /opt/yarn COPY --from=node /usr/local/bin/node /usr/local/bin/ COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npx # 必要なパッケージのインストール RUN apt-get update -qq && apt-get install -y \ build-essential \ libpq-dev \ postgresql-client WORKDIR /myapp # yarnの更新 COPY package.json yarn.lock /myapp/ RUN yarn install # Gemのインストール COPY Gemfile Gemfile.lock /myapp/ RUN bundle install # カレントディレクトリの内容を/myappに全てコピーする COPY . /myapp/
2. docker-compose.ymlの作成
今回、DBにはPostgreSQLを用いるので、複数のコンテナを動かす必要があります。
複数のコンテナを一括で作成・起動をするためdocker-compose.ymlを作成します。
docker-compose.ymlはDockerfileと同階層に作成をします。
version: '3' volumes: db-data: services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - '3000:3000' environment: - 'DATABASE_PASSWORD=postgres' volumes: - '.:/myapp' tty: true stdin_open: true depends_on: - db links: - db db: image: postgres:12 volumes: - 'db-data:/var/lib/postgresql/data' environment: - 'POSTGRES_USER=postgres' - 'POSTGRES_PASSWORD=postgres'
3. Gemfileとconfig/database.ymlの修正
プロジェクト内のGemfileとconfig/database.ymlを修正します。
GemfileにはPostgreSQLの接続用gemを追加します。
gem 'pg'
また、PostgreSqlを使用するための設定をconfig/database.ymlに追加します。
default: &default adapter: postgresql encoding: unicode host: db user: postgres port: 5432 password: <%= ENV.fetch("DATABASE_PASSWORD") %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
4. イメージの作成
以下のコマンドを実行して、イメージを作成します。
$ docker-compose build
5. DBの作成・マイグレーション
以下のコマンドを実行して、DBを作成し、マイグレーションを実行します。
$ docker-compose run --rm web rails db:create db:migrate
5. 実行環境の起動
以下のコマンドを実行し、コンテナを起動します。
$ docker-compose up
コンテナを起動した後、http://localhost:3000
に接続するとRailsプロジェクトの画面が表示されます。
以上で、Ruby on Railsプロジェクトの実行環境の構築が完了です。