dockerとは何か
1台のサーバー上に、コンテナという複数のアプリケーション実行環境(開発環境)を構築でき、開発環境の共有や移転を簡単に行うことができるツールです。OSやハードウェアを問わずに実行できるため、Windows+Linuxのように、複数OSでアプリケーションの動作を確認したり共有したりする際にも適しています。
dockerを使用することで、動作の一貫性を保証することができ、環境構築における手間を大きく削減することが可能です。
使用したきっかけ
Railsチュートリアルに取り組むにあたって、codespaceというgithubを使用した開発環境で進めていましたが、より実践に近い、自分の力で開発環境を構築してみようと思ったからです。
環境構築方法
早速環境構築を行なっていきます。dockerはインストール済みであることが前提で進めるため、まだの方は以下からインストールを行なってください。
1. ディレクトリ、ファイルの作成
ターミナル上で以下のコマンドを実行
mkdir myapp /*作業用ディレクトリ名は任意*/
cd myapp
touch docker-compose.yml Dockerfile Gemfile Gemfile.lock
作成されたファイル
- docker-compose.yml
- Dockerfile
- Gemfile
- Gemfile.lock
2. 環境構築用のコードを記述
先ほど作成したファイルにコードを記述する。
version: '3.9'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 4000 -b '0.0.0.0'"
stdin_open: true
tty: true
volumes:
- .:/myapp
ports:
- "4000:4000"
depends_on:
- db
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
バージョンを指定し、必要なファイルのインストール、コンテナに作業ディレクトリのコピーなどを行なっている。
source 'https://rubygems.org'
gem 'rails', '~>7.0.3'
/*こちらはGemfileの内容が入るため、空欄でOK*/
ターミナルで以下を実行
Ruby on Railsで開発するために必要なファイルが作成される。
docker-compose run web rails new . --force --database=postgresql
作成したdockerファイルの内容をもとにイメージ、コンテナが生成される。
docker compose build
config/database.ymlファイルにコードを追加
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres /*追加*/
password: password /*追加、docker.compose.ymlに設定したパスワード(POSTGRES_PASSWORD)*/
pool: 5 /*追加*/
docker compose up -d
サーバーが立ち上がり、docker.compose.ymlで指定したURL localhost:4000にアクセスすることができます。現在はデータベースを作成していないため、アクセスしようとするとエラーになります。
データベースを追加するために下記を実行してください。
docker-compose run web rails db:create
docker-compose run web rails db:migrate
再度localhost:4000のURLにアクセスすると、無事初期画面を表示できました!
感想
環境構築をするだけなのに、ものすごく時間がかかりました・・・
これから学習する方の参考になれば幸いです。
参考
Docker + Rails7.1 の環境構築で詰まったポイント
dockerクイックスタートガイド
【Ruby on Rails7環境構築】Dockerでrails newする
【Rails】Dockerで環境構築をする方法