はじめに
今回はDockerとDocker Composeの学習をして、既存のRailsアプリをDocker化する手順をまとめてみました。
なるべくわかりやすくまとめていきたいと思いますのでよかったら最後まで見ていってください。
開発環境について
今回動作確認が取れた環境は以下になります。
各種バージョン
rails-7.0.6
ruby 3.2.2
PostgreSQL 12
開発環境
- CPU Apple M2
- OS MacOS 13.4.1
ターミナルおよびテキストエディタはVScode
を使用しています。
また、上記記載以外のバージョンやOSなどでは動作確認を行なっていないため、予めご了承ください。
Docker化の手順
まず大まかにDocker化する手順から見ていきたいと思います。
今回はGitHubにあるDocker化されていないrailsアプリのリポジトリをクローンしてきてDocker化する手順を記載していこうと思います。
手順
1.GitHubにあるリポジトリをクローンしてローカル環境に置く
2.新規Dockerfileを作成する
3.新規Docker-compose.ymlを作成する
4.database.ymlファイルを編集する
5.Docker Composeを使用してコンテナを作成し実行する
6.ブラウザ上でlocalhost:3000にアクセスして動作確認をする
上記のような流れに沿ってDocker化を進めていきます。
それでは早速手順ごとに細かく説明していこうと思います。
1.GitHubにあるリポジトリをクローンしてローカル環境に置く
GitHubで使いたいコードをクローンします。
$ git clone <使いたいリポジトリのSSH key.>
使用したいリポジトリに移動する
$ code <使用したいリポジトリ名>
2.新規Dockerfileを作成する
touch
コマンドを使って新規Dockerfileを作成する
$ touch Dockerfile
作成したDockerfileを使ってDocker imageを作成する
Dockerfileの中はこんな感じになります
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install
3.新規docker-compose.ymlを作成する
2と同様にtouch
コマンドを使ってdocker-compose.ymlファイルを作成する
$ touch docker-compose.yml
作成したファイルの作成をしていきます。
docker-composeを使うことによって、複数のコンテナの管理を効率的に行う事ができるメリットがあります!
# Docker Composeのバージョンを指定する
version: '3'
volumes:
db-data:
services:
# webコンテナの設定
web:
# カレントディレクトリのDockerfileでビルドする
build: .
# railsサーバーの起動時の設定を行う
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# ポートの設定を行う(railsのデフォルトのポートは3000番)
ports:
- '3000:3000'
# カレントディレクトリのファイル・フォルダを/rails-dockerにマウントする
volumes:
- '.:/rails-docker'
# 環境変数の設定を行う
environment:
- 'DATABASE_PASSWORD=postgres'
# 出力をプリティーにする
tty: true
# 標準入出力とエラー出力をコンテナと結びつける
stdin_open: true
# コンテナの依存関係を指定する
depends_on:
- db
# リンクの指定をする
links:
- db
# データベースコンテナの設定
db:
# postgresの12を指定する
image: postgres:12
# db-dataを/var/lib/postgresql/dataにマウントして永続化させる
volumes:
- 'db-data:/var/lib/postgresql/data'
# 環境変数の設定をする
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
- 'POSTGRES_HOST_AUTH_METHOD=trust'
4.database.ymlファイルを編集する
config/database.ymlの編集をする
default: &default
adapter: postgresql
encoding: unicode
host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
5.Docker Composeを使用してコンテナを作成し実行する
docker imageをbuildする
$ docker-compose build
コンテナを作成し起動する
$ docker-compose up -d
作成したコンテナの中に入る
$ docker-compose exec web bash
DBの作成をする
$ rails db:create
DBの更新をする
$ rails db:migrate
6.ブラウザ上でlocalhost:3000にアクセスして動作確認をする
最後にブラウザ上でlocalhost:3000にアクセスできれば成功になります。
よく使うdockerとdocker-composeのコマンド一覧
よく使うコマンドの一覧をまとめておきます。
必要に応じてお使いください。
# イメージを作成する
$ docker-compose build
# コンテナを作成して起動する
$ docker-compose up
# コンテナを停止する
control + c
# コンテナの起動(バックグラウンド)
$ docker-compose up -d
# コンテナを停止する(バックグラウンド)
$ docker-compose stop
# コンテナを停止して削除する
$ docker-compose down
# webコンテナにログインする
$ docker exec -it appname_web_1 bash
# イメージの一覧を出力する
$ docker images
# コンテナの一覧を出力する
$ docker ps -a
最後に
今回はDocker Composeを使ってRailsアプリのDocker化の方法についてまとめてきました。
Dockerを使用することによって簡単に環境を構築することができます。
今回は簡単なアプリでしたが、複雑なアプリになるともっとファイルの中身も複雑になっていくのかなと思いますので、しっかりと書けるようにしていきたいです。
最後までご覧いただきありがとうございました。