0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker Composeを使って既存のRailsアプリのDocker化する方法

Posted at

はじめに

今回は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.yml
# 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の編集をする

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にアクセスできれば成功になります。
スクリーンショット 2023-07-28 22.49.47.png

よく使う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を使用することによって簡単に環境を構築することができます。
今回は簡単なアプリでしたが、複雑なアプリになるともっとファイルの中身も複雑になっていくのかなと思いますので、しっかりと書けるようにしていきたいです。

最後までご覧いただきありがとうございました。

参考文献

クィックスタート: Compose と Rails
米国AI開発者がゼロから教えるDocker講座

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?