8
7

【Rails】既存のRailsアプリをDocker化してみた【Docker + Ruby3.2.2 + Rails7.0.8 + importmap + Node.js 20.2.0 + Tailwind CSS + daisyUI + PostgreSQL】

Last updated at Posted at 2023-12-12

はじめに

お疲れさまです!
おおくまです!

今回は、既存のRailsアプリを初めてDocker化してみました!
環境としては、
Docker + Ruby3.2.2 + Rails7.0.8 + importmap + Node.js 20.2.0 + Tailwind CSS + daisyUI + PostgreSQL
です!

データベースに関しては、ローカルではSQLite、本番ではPostgreSQLを使っていたので、どちらもPostgreSQLを使うように修正します!

また、サーバーを立ち上げる際は、./bin/devのコマンドを使い、
JSやCSSがビルドされ、なおかつJSやCSSを変更したときに自動的に再ビルドされるようにします!
備忘録として残したいと思います!

こちらがDocker化する前のリポジトリです!

注意点

私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。

環境

Ruby 3.2.2
Rails 7.0.8
Node.js 20.2.0
Docker Desktopをインストール済み

手順

ターミナル
touch Dockerfile compose.yaml entrypoint.sh

Docker化したいアプリのディレクトリに移動した状態で、上記のコマンドを実行し、ファイルを3つ作成します!

それぞれコードを書いていきます!

Dockerfile
FROM ruby:3.2.2

ENV TZ Asia/Tokyo

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs && apt-get install -y vim

RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - \
  && wget --quiet -O - /tmp/pubkey.gpg https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
  && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
  && apt-get update -qq \
  && apt-get install -y nodejs yarn

WORKDIR /kuma_lab

COPY Gemfile Gemfile.lock /kuma_lab/

RUN bundle install

COPY package.json yarn.lock /kuma_lab/

RUN yarn install

RUN yarn add daisyui

COPY . /kuma_lab/

COPY entrypoint.sh /usr/bin/

RUN chmod +x /usr/bin/entrypoint.sh

ENTRYPOINT ["entrypoint.sh"]

CMD ["./bin/dev"]
compose.yaml
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_volume:/var/lib/postgresql/data
    ports:
      - '5432:5432'
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: sh -c "rm -f tmp/pids/server.pid && ./bin/dev"
    volumes:
      - .:/kuma_lab
      - node_modules:/kuma_lab/node_modules
    ports:
      - 3000:3000
    stdin_open: true
    tty: true
    depends_on:
      - db
volumes:
  postgres_volume:
  node_modules:
#!/bin/bash

set -e

rm -f /kuma_lab/tmp/pids/server.pid

exec "$@"

次にProcfile.devを編集します!

Procfile.dev
- web: bin/rails server -p 3000
+ web: bin/rails server -b 0.0.0.0 -p 3000
css: bin/rails tailwindcss:watch

次にデータベース周りを編集していきます!

ターミナル
: > Gemfile.lock
Gemfile
# 〜中略〜
+ gem 'pg'

group :development, :test do
  gem 'debug', platforms: %i[mri mingw x64_mingw]
- gem 'sqlite3', '~> 1.4'
end

- group :production do
-   gem 'pg'
- end
ターミナル
docker compose exec web bundle install
config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: user
  password: password
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: test_app_development

test:
  <<: *default
  database: test_app_test

production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>
ターミナル
docker-compose up -d --build
docker compose exec web rails db:prepare

上記のコマンドで、ビルドし、データベースをセットアップすれば、環境構築は終了です!

こちらがDocker化した後のリポジトリです!

お疲れ様でした!

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7