0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

webアプリケーションをDocker化する方法について

Posted at

はじめに

お久しぶりです。takimonです。

今回Dockerの勉強をしました。

最近、Dockerについて勉強する機会がありました。

その中で、RailsのWebアプリケーションをDocker化する手順をまとめたので、皆さんに共有したいと思います。

dockerがわからないと言う方はぜひ以下のサイトからDockerの基本を勉強してみてください。

WebアプリのDocker化の方法

今回はRailsのアプリを例にDocker化していきます。

Docker化したいWebアプリケーションは皆さんの方で準備してください。

事前準備

以下のバージョンで動作するRailsアプリを準備します

Ruby: 3.2.2
Rails: 7.0.6
PostgreSQL: 12

1. Dockerfileとdocker-compose.ymlの作成

Dockerfiledocker-compose.ymlという2つのファイルを新規作成します。これらのファイルが、Dockerを使ってアプリケーションを動かすためファイルになります。

####Dockerfileを作成する
Dockerイメージを構築するための手順を記述するファイルです。アプリケーションが動作するOS環境や、必要なライブラリのインストールなどを定義しています。

# ベースとなるRubyイメージを指定
FROM ruby:3.2.2

# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
  build-essential \
  libpq-dev \
  nodejs

# 作業ディレクトリを作成して、移動
RUN mkdir /rails-docker
WORKDIR /rails-docker

# GemfileとGemfile.lockをコンテナ内にコピーして、Gemをインストール
ADD Gemfile /rails-docker/Gemfile
ADD Gemfile.lock /rails-docker/Gemfile.lock
RUN bundle install

# 残りのファイルをコンテナ内にコピー
ADD . /rails-docker

docker-compose.ymlを作成する

複数のDockerコンテナを連携させて動かすための設定ファイルです。

services:
  web:
    # 現在のディレクトリのDockerfileを使用してイメージをビルド
    build: .

    # コンテナ起動時に実行するコマンド
    command: bundle exec rails s -p 3000 -b "0.0.0.0"

    # 現在のディレクトリをコンテナの/rails-dockerにマウント
    volumes:
      - .:/rails-docker

    # データベース接続に使用するための環境変数を設定。
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres

    # ホストOSのポート3000をコンテナのポート3000に設定
    ports:
      - 3000:3000

    # dbサービスが起動してからwebサービスを起動
    depends_on:
      - db

    links:
      - db
  db:
    # Postgre12.0の公式イメージを使用
    image: postgres:12.0
    # データベースの永続化のためにボリュームをマウント
    volumes:
      - "db-data:/var/lib/postgresql/data"

volumes:
  # db-dataという名前のボリュームを定義
  db-data:

2. database.ymlを修正

PostgreSQLデータベースに接続できるように、config/database.yml を以下のように修正します。

default: &default
  adapter: postgresql
  encoding: unicode
  # Docker Composeで定義したDBサービス名に合わせる
  host: db

  # Docker Composeで設定した環境変数からユーザー名とパスワードを取得
  user: <%= ENV.fetch("POSTGRES_USER") %>
  password: <%= ENV.fetch("POSTGRES_PASSWORD") %>

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>

3. Docker イメージのビルド

作成したDockerfileとdocker-compose.ymlを元に、Dockerイメージをビルドします。
以下のコマンドを実行してください。

docker-compose build

4. Docker コンテナの起動

イメージのビルドが完了したら、以下のコマンドでDockerコンテナを起動します。

docker-compose up

5. データベースのセットアップ

Railsアプリケーションからデータベースをセットアップする必要があります。以下のコマンドを順に実行してください。

データベースの作成

まず、データベース自体を作成します。

docker-compose run web rake db:create

マイグレーションの実行

次に、Railsのマイグレーションを実行してテーブルを作成します。

docker-compose run web rake db:migrate

6. ローカルホストでの接続確認

Web ブラウザで以下の URL にアクセスしてアプリケーションが動作していることを確認します。
http://localhost:3000

おわりに

いかがでしたでしょうか?

初めてDockerを使ったとき、「こんなに簡単に環境構築できるだ!」と感動したのを覚えています。開発環境のセットアップにかかる時間を大幅に削減できるので、ぜひ皆さんも活用してみてください。

今回はDockerfileやdocker-compose.ymlの中身の詳しい解説は割愛しましたが、これらの設定を理解することは、Dockerを使いこなす上で非常に重要です。
ぜひDockerの公式ドキュメントやチュートリアルなどを参考に、さらに深く学んでみてください。

私もこれからもdockerの勉強を続けていきたいと思います!

参考URL

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?