LoginSignup
0
2

webアプリをDocker化する方法

Last updated at Posted at 2023-08-26

はじめに

今回はdocker-composeで既存のrailsアプリをDocker化する方法をまとめました。
Dockerの学習がメインのためRubyやRailsに詳しくなくても実施できます!

docker-composeとは

複数のコンテナを組み合わせて1つのアプリケーションとして構成を定義するファイルです。
docker-composeを使用ことで以下のメリットがあります。

  1. docker run コマンドを短くすることができる
  2. 複数のコンテナをまとめて起動できる
    docker runコマンドは複数のオプションを使用する場合があるためどうしても長くなってしまいます。それをdocker-composeが解消してくれます!
    ※docker-composeにはdocker-compose.ymlが必要です。

環境

以下の環境で構築してます。

Rails 7.0.6
ruby  3.2.2
postgres 12

手順

Docker化するのにRailsとpostgres2つのコンテナを立てるためdocker-composeを使用しています。
はじめに一通りの流れを説明します。

  1. Dockerfileの作成
  2. docker-compose.ymlの作成
  3. database.ymlの編集
  4. コンテナを起動
  5. ブラウザ上で動作確認を実施

事前準備

  • 既存のrailsアプリの準備
  • Dockerを起動させておく

Dockerfileの作成

Dockerfileとはアプリケーションのビルドに必要な設定(動作させるのに必要なサーバー等の)が書かれたファイルです。以下がファイルの中身です。
こちらの記事を元に作成しています。

dockerfile
# ベースイメージの指定
FROM ruby:3.2.2

# パッケージのインストールと更新
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y postgresql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# 作業ディレクトリの指定
WORKDIR /myproject

# fileの追加
ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock

# gemをインストールする際のコマンド
RUN bundle install   

ADD . /myproject

※Dockerfileで指定するベースイメージは、プロジェクトのRubyバージョンに合わせておく必要があるためGemfile(Railsアプリで利用するgemの一覧を管理するファイル)を確認しましょう。

gemfile
ruby "3.2.2"gem 
"rails", "~> 7.0.6"

docker-compose.ymlの作成

次はdocker-composeを使用するためにdocker-compose.ymlを作成します。これはアプリケーションを構成するサービスを記載し、それらを一括で実行してくれるものです。

docker-compose.yml
# バージョンを指定
version: '3'

services:
# dbコンテナの設置
  db:
    container_name: rails-docker-db
    image: postgres:12
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
    volumes:
      - type: volume
        source: rails-docker-db-volume
        target: /var/lib/postgresql/data
# webコンテナの設置
  web:
    build:
      context: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
    volumes:
      - type: bind
        source: .
        target: /myapp
    ports:
      - '3000:3000'     
    depends_on:
      - db

volumes: 
  rails-docker-db-volume:

database.ymlの編集

database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: <%= ENV['POSTGRES_USER'] %>
  password: <%= ENV['POSTGRES_PASSWORD'] %>
  port: 5432  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

デフォルトではなかったhost username passwordを今回追加しています。
usernameとpasswordは環境変数に置き換えています。

コンテナの作成と実行

ここまでできたらいよいよコンテナを立ち上げます。
以下の順でコマンドを実行してください。
イメージの作成

docker-compose build

コンテナの作成と起動

docker-compose up -d

コンテナの中に入る

docker-compose exec web bash

dbの作成

rails db:create

dbの更新

rails db:migrate

ブラウザ上でlacalhost:3000にアクセス

ブラウザ上でアプリケーションが確認できれば完成です。
これでrailsアプリをDocker化する手順は以上です。

さいごに

最後まで読んでいただきありがとうございました。
自己学習用の記事ではありますが、同じくdockerやrailsを学習している方の参考になれれば幸いです。

以下、参考教材・記事になります。
Udemy「米国AI開発者がゼロから教えるDocker講座」
実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本
既存のRailsアプリにDockerを導入する手順

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