RailsアプリをDocker化してみた
はじめに
この記事では、Dockerfile
、docker-compose.yml
を作成することで、既存のRailsアプリをDocker化する方法を紹介します。
前提条件
- Docker Desktopがインストールされていること
- 対象となる既存のRailsアプリが存在すること
- DBはPostgreSQLを使用すること
Dockerfileの作成
RailsアプリのルートディレクトリにDockerfile
を作成し、下記の内容を記述します。
FROM node:16 as build-stage FROM ruby:3.0.2 # Install Node.js and Yarn RUN mkdir -p /opt COPY --from=build-stage /opt/yarn-* /opt/yarn COPY --from=build-stage /usr/local/bin/node /usr/local/bin/ COPY --from=build-stage /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 # Setup Rails App RUN apt-get update -qq && apt-get install -y \ build-essential \ libpq-dev RUN mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp
イメージ軽量化のためマルチステージビルドしていますが、ここでは紹介しないので下記を参考にしてください。
docker-compose.ymlの作成
Railsアプリのルートディレクトリにdocker-compose.yml
ファイルを作成し、以下の内容を記述します。
version: "3" services: db: image: postgres:12 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres volumes: - db_data:/var/lib/postgresql/data web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db stdin_open: true tty: true environment: DB_HOST: db DB_NAME: myapp DB_USER: postgres DB_PASSWARD: postgres volumes: db_data:
config/database.ymlの編集
Railsアプリのconfig/database.yml
ファイルを編集して、PostgreSQLを使用するように設定します。
default: &default adapter: postgresql host: <%= ENV['DB_HOST'] %> database: <%= ENV['DB_NAME'] %> username: <%= ENV['DB_USER'] %> password: <%= ENV['DB_PASSWARD'] %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: myapp_dev test: <<: *default database: myapp_test production: <<: *default database: myapp_prd
動作確認
下記のコマンドで、Dockerコンテナを起動します。
docker-compose build docker-compose up
次に、データベースの作成です。
docker-compose run web rake db:create
コンテナ内でマイグレーションする。
docker-compose exec web bash > rails db:migrate
http://localhost:3000/
にアクセスして、アプリケーションが正常に動作していることを確認できれば完了です!
まとめ
この記事では、RailsアプリをDockerコンテナで実行するための基本的な設定を行いました。非DockerなものをDocker化するのは骨が折れると思いますが、Docker環境での開発のメリットは大きいので移行しておくいいかと思います!
P.S. 本番環境をEC2→ECSに移行するのは結構大変そう...