Dockerを使ったrails開発環境を作成しよう
まえがき
説明の流れは、下記の記事で行っていきます。
ただ、環境が違いのせいかコピペでは、動作しませんでした。
そのため、自分用にファイルの中身を調整したものを使って動かしてます。
※dockerとdocker-composeは、インストール前提で説明していきます。
されていない方は、インストールをお願いします。
環境構築に必要なファイルを準備しよう
必要なファイル
- Gemfile
- Gemfile.lock (空のファイルです)
- Dockerfile
- docker-compose.yml
ruby・railsのバージョンは、自身が使いたいバージョン・既存のアプリケーションに合わせてください。
Gemfile
source 'https://rubygems.org' gem 'rails', '~> 6.0'
Dockerfile
FROM node:18.16.0 as node FROM ruby:3.0.2 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 postgresql-client WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install EXPOSE 3000
どうせWebアプリをつくるなら、データベースも必要だよねってことで、PostgreSQLコンテナも用意します。
docker-compose.yml
version: '3' services: db: image: postgres:15-alpine restart: always volumes: - postgres_volume:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=password - POSTGRES_HOST_AUTH_METHOD=trust ports: - "5432:5432" web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db volumes: postgres_volume:
テンプレートファイルの作成
※既存アプリケーションを使って、開発する人はこの手順は不要です。
以下のコマンドを実行してください
docker-compose run web rails new . --force --database=postgresql
データベース作成
起動前にデータベースは作成した方がいいです。
docker-compose run web rails db:create
起動
docker-compose up -d
ようやく起動しました。以下のURLにアクセスして下さい。
http://localhost:3000/
後書き
Ruby・Railsのバージョンが違うだけで、
bundle installがコンテナ内で実行できなかったり
コンテナ内のDBにうまく繋がらなかったりと試行錯誤の繰り返しでした。