はじめに
お久しぶりです。takimonです。
今回Dockerの勉強をしました。
最近、Dockerについて勉強する機会がありました。
その中で、RailsのWebアプリケーションをDocker化する手順をまとめたので、皆さんに共有したいと思います。
dockerがわからないと言う方はぜひ以下のサイトからDockerの基本を勉強してみてください。
WebアプリのDocker化の方法
今回はRailsのアプリを例にDocker化していきます。
Docker化したいWebアプリケーションは皆さんの方で準備してください。
事前準備
以下のバージョンで動作するRailsアプリを準備します
Ruby: 3.2.2
Rails: 7.0.6
PostgreSQL: 12
1. Dockerfileとdocker-compose.ymlの作成
Dockerfileとdocker-compose.ymlという2つのファイルを新規作成します。これらのファイルが、Dockerを使ってアプリケーションを動かすためファイルになります。
####Dockerfileを作成する
Dockerイメージを構築するための手順を記述するファイルです。アプリケーションが動作するOS環境や、必要なライブラリのインストールなどを定義しています。
# ベースとなるRubyイメージを指定
FROM ruby:3.2.2
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs
# 作業ディレクトリを作成して、移動
RUN mkdir /rails-docker
WORKDIR /rails-docker
# GemfileとGemfile.lockをコンテナ内にコピーして、Gemをインストール
ADD Gemfile /rails-docker/Gemfile
ADD Gemfile.lock /rails-docker/Gemfile.lock
RUN bundle install
# 残りのファイルをコンテナ内にコピー
ADD . /rails-docker
docker-compose.ymlを作成する
複数のDockerコンテナを連携させて動かすための設定ファイルです。
services:
web:
# 現在のディレクトリのDockerfileを使用してイメージをビルド
build: .
# コンテナ起動時に実行するコマンド
command: bundle exec rails s -p 3000 -b "0.0.0.0"
# 現在のディレクトリをコンテナの/rails-dockerにマウント
volumes:
- .:/rails-docker
# データベース接続に使用するための環境変数を設定。
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
# ホストOSのポート3000をコンテナのポート3000に設定
ports:
- 3000:3000
# dbサービスが起動してからwebサービスを起動
depends_on:
- db
links:
- db
db:
# Postgre12.0の公式イメージを使用
image: postgres:12.0
# データベースの永続化のためにボリュームをマウント
volumes:
- "db-data:/var/lib/postgresql/data"
volumes:
# db-dataという名前のボリュームを定義
db-data:
2. database.ymlを修正
PostgreSQLデータベースに接続できるように、config/database.yml を以下のように修正します。
default: &default
adapter: postgresql
encoding: unicode
# Docker Composeで定義したDBサービス名に合わせる
host: db
# Docker Composeで設定した環境変数からユーザー名とパスワードを取得
user: <%= ENV.fetch("POSTGRES_USER") %>
password: <%= ENV.fetch("POSTGRES_PASSWORD") %>
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>
3. Docker イメージのビルド
作成したDockerfileとdocker-compose.ymlを元に、Dockerイメージをビルドします。
以下のコマンドを実行してください。
docker-compose build
4. Docker コンテナの起動
イメージのビルドが完了したら、以下のコマンドでDockerコンテナを起動します。
docker-compose up
5. データベースのセットアップ
Railsアプリケーションからデータベースをセットアップする必要があります。以下のコマンドを順に実行してください。
データベースの作成
まず、データベース自体を作成します。
docker-compose run web rake db:create
マイグレーションの実行
次に、Railsのマイグレーションを実行してテーブルを作成します。
docker-compose run web rake db:migrate
6. ローカルホストでの接続確認
Web ブラウザで以下の URL にアクセスしてアプリケーションが動作していることを確認します。
http://localhost:3000
おわりに
いかがでしたでしょうか?
初めてDockerを使ったとき、「こんなに簡単に環境構築できるだ!」と感動したのを覚えています。開発環境のセットアップにかかる時間を大幅に削減できるので、ぜひ皆さんも活用してみてください。
今回はDockerfileやdocker-compose.ymlの中身の詳しい解説は割愛しましたが、これらの設定を理解することは、Dockerを使いこなす上で非常に重要です。
ぜひDockerの公式ドキュメントやチュートリアルなどを参考に、さらに深く学んでみてください。
私もこれからもdockerの勉強を続けていきたいと思います!
参考URL