0
0

既存のプロジェクトを Docker 化する手順について (Rails + PostgreSQL)

Posted at

はじめに

今回は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 の学習を継続したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0