Railsアプリをdocker化する方法をまとめてます。
環境
- docker: 20.10.12
- Ruby: 3.2.2
- Rails: 7.0.6
- DB: PostgreSQL 12
Docker化の手順
-
Dockerfileの作成
Dockerfile
を作成し、以下を記述する。DockerfileFROM ruby:3.2.2 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs WORKDIR /myapp ADD Gemfile Gemfile.lock /myapp/ RUN bundle install
-
docker-compose.ymlの作成
docker-compose.yml
を作成し、以下を記述する。docker-compose.ymlversion: '3' volumes: db-data: services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' environment: - 'DATABASE_PASSWORD=${POSTGRES_PASSWORD}' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db db: image: postgres:12 environment: - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}' volumes: - 'db-data:/var/lib/postgresql/data'
-
DBの設定
config/database.yml
を以下のように書き換える。config/database.ymldefault: &default adapter: postgresql encoding: unicode host: db user: postgres port: 5432 password: <%= ENV.fetch("DATABASE_PASSWORD") %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: myapp_development test: <<: *default database: myapp_test
-
DBパスワードの設定
.env
を作成し、以下を記述する。.envPOSTGRES_PASSWORD=任意のパスワードを記述
動作確認
-
イメージの作成
以下コマンドを実行し、イメージを作成する。$ docker-compose build
-
DB 作成
以下コマンドを実行し、DB を作成する。$ docker-compose run web rake db:create $ docker-compose run web rails db:migrate
-
コンテナの作成・起動
以下コマンドを実行し、コンテナを作成・起動する。$ docker-compose up
-
動作確認
http://localhost:3000/ にアクセスする