はじめに
今回はRailsのプロジェクトを Docker 化を紹介します。よろしくお願いします。
Docker 化することの意味
Docker 化することで開発環境を共有でき、さらに Dockerfile を共有することで複数人で共通の環境を構築できます。OS ごとに挙動が変わることがなく、また、コンテナという仮想環境で作業するので自分の PC にあれこれインストールしなくて済みます。
Docker 化の手順
1. githubから Web アプリのソースコードを引っ張ってきます。(今回はRailsアプリ)
2. Dockerfile、docker-compose.yml というものを作ります。
3. database.yml というファイルを編集します。
4. Docker のイメージ・コンテナ・データベースを作成し、プロジェクト起動
1. githubから Web アプリのソースコードを引っ張ってくる
git clone というコマンドでgithubに上がっているプロジェクトのソースコードをローカル環境(自分のパソコン)に持ってきます。
git clone (リポジトリの SSH key)
リポジトリのSSH key は(git@github.com)から始まるやつです。
2. Dockerfile、docker-compose.yml を作成
Docker コンテナという仮想環境を作りたいのですが、その前に準備が必要です。
Dockerfile 作成
↓
Dockerimage 作成
↓
Docker コンテナ 作成
コンテナ作成は上記の流れになります。
今回のアプリはRails + postgresql(データベース)を使用します。Railsで一つのコンテナ、postgresqlで一つのコンテナ、計2つのコンテナを使用するので、複数のコンテナを定義・実行・管理できる Docker compose というものを使います。
Dockerfile を作成
Dockerfile は Dockerimage の設計図のようなものです。パッケージのインストールや作業ディレクトリなど様々な設定を行います。touch コマンドで Dockerfile を作成し以下のように記述します。
ruby のバージョン指定
FROM ruby:3.2.2
# パッケージをインストール
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs\
postgresql-client \
yarn
# 作業ディレクトリを rails-docke に指定
WORKDIR /rails-docker
# Gemfile Gemfile.lock を rails-docker に追加
COPY Gemfile Gemfile.lock /rails-docker/
# bundle install を実行
RUN bundle install
docker-compose.yml を作成
docker-compose.yml とは、Docker Compose を使うための設定を定義するファイルです。docker-compose.yml でそれぞれのコンテナについて条件を定義します。touch コマンドで docker-compose.yml を作成し以下のように記述します。
コンテナのバージョンを指定
version: "3"
データを保存する場所を設定
volumes:
db-data:
各コンテナの設定
services:
web コンテナの設定
web:
現在のディレクトリで Dockerfile のイメージをビルド
build: .
コンテナ起動時にコマンドを実行
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ポート番号を 3000 に設定
ports:
- "3000:3000"
ローカル側とコンテナ側で同期したいディレクトリを設定
volumes:
- .:/rails-docker
db コンテナから起動するように設定
depends_on:
- db
環境変数を設定
environment:
- "DATABASE_PASSWORD=postgres"
db コンテナの設定
db:
postgresql のバージョンを設定
image: postgres:12
環境変数を設定
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_HOST_AUTH_METHOD=trust
ホストの db データをコンテナに共有
volumes:
- db-data:/var/lib/postgresql/data
3. database.yml ファイルの編集
database.yml はRailsがデータベースに接続する時に必要になる情報を保管しています。host、username、password を設定します。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: db
username: postgres
password: postgres
development:
<<: \*default
database: myapp_development
test:
<<: \*default
database: myapp_test
production:
<<: \*default
database: myapp_production
username: myapp
password: <%= ENV["MYAPP\_DATABASE\_PASSWORD"] %>
ファイルに以下の記述を追加しました。
host: db
username: postgres
password: postgres
4. Docker のイメージ・コンテナ・データベース作成しプロジェクト起動
下記コマンドでイメージを作成します。
docker-compose build
下記コマンドでコンテナを作成します。
docker-compose up -d
そして、コンテナの中に下記コマンドで入ります
docker-compose exec web bash
コンテナの中に入ったら下記コマンドでRailsのデータベースを作成します。
rails db:create
↓
rails db:migrate
この後 exit でコンテナを抜け、
docker-compose up
をコマンドで実行し、ブラウザのアドレスバーにhttp://localhost:3000と入力します。プロジェクトの画面が出力されていれば成功です。
プロジェクトは ctrl + C で終了できます。
おわりに
今回はプロジェクトを Docker 化する方法を紹介しました。私も含め初学者にとっては難しい内容ではありますが、使いこなせば大きな恩恵を受けられるので、これからも Docker の学習を継続したいと思います。