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?

dockerとdocker composeでwebアプリをdocker化する方法

0
Posted at

Dockerを学習したので、DockerでWebアプリをdocker化する手順を記載していきます。
railsアプリのテンプレがすでに用意されているので、今回はそちらを使用します。
(git cloneしてローカル環境に配置)

最初はDockerfileとdocker-compose.ymlをアプリのベースとなるディレクトリに作成します。
Dockerfileにはコンテナの基礎となる情報を記載し、
docker-compose.ymlには、コンテナへの追加設定と複数コンテナ(サービス)について記載していきます。

Dockerfile

まずはDokcerfileを編集する。

Dockerfile
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Dockerfileの説明

  • ベースのイメージにRubyのバージョン3.2.2を指定
  • コンテナ内で必要なパッケージをインストール
    (rails、ruybやpostgresをコンパイルするのに必要なパッケージ)
  • コンテナ内のワークディレクトリ作成 & 指定
  • GemfileとGemfile.lockをワークディレクトリへコピーする
  • bundle installを実行
  • カレントディレクトリ(プロジェクトのあるディレクトリ)の全てを
    ワークディレクトリへコピーする。

docker-compose.yml

docker-compose.ymlを編集する。

docker-compose.yml
version: "3"
services:
  db:
    image: postgres:12
    environment:
      - "POSTGRES_USER=postgres"
      - "POSTGRES_PASSWORD=postgres"
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    environment:
      - "POSTGRES_PASSWORD=postgres"
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-compose.ymlの説明

db サービス

  • データベースにpostgresのバージョン12を指定
  • 環境変数(ユーザ、パスワード)を設定

web サービス

  • カレントディレクトリをビルドコンテキストに指定
  • コンテナ立ち上げ時に実行されるコマンドを設定(rails サーバを起動)
  • ボリュームマウントを設定(コンテナ内のWORKDIRをホストのカレントディレクトリにマウント)
  • 環境変数(postgresのパスワード)を設定
  • ポートを設定(ホストマシンのポート:コンテナ内のポート)
  • 依存設定(dbサービスを先に立ち上げてからwebサービスを立ち上げる)

config/database.yml

次にconfig/database.ymlを編集します。

database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  user: postgres
  password: <%= ENV.fetch("POSTGRES_PASSWORD") %>

database.yml

  • host: db を設定することで、servicesのdbを指すことができる
  • userとpasswordを設定
  • passwordは環境変数から取得
    (webサービスからのアクセス時にdocker-compose.ymlに設定した環境変数(パスワード)から受け取る)

コンテナ起動

ターミナル上でビルドコンテキストのあるディレクトリへ移動し
以下のコマンドを実行。

$ docker-compose up 

以下のログが出力されれば、コンテナ起動成功。

rails7_docker_template-db-1   | 2026-04-13 14:03:55.701 UTC [1] LOG:  database system is ready to accept connections
rails7_docker_template-web-1  | => Booting Puma
rails7_docker_template-web-1  | => Rails 7.0.6 application starting in development 
rails7_docker_template-web-1  | => Run `bin/rails server --help` for more startup options
rails7_docker_template-web-1  | Puma starting in single mode...
rails7_docker_template-web-1  | * Puma version: 5.6.6 (ruby 3.2.2-p53) ("Birdie's Version")
rails7_docker_template-web-1  | *  Min threads: 5
rails7_docker_template-web-1  | *  Max threads: 5
rails7_docker_template-web-1  | *  Environment: development
rails7_docker_template-web-1  | *          PID: 1
rails7_docker_template-web-1  | * Listening on http://0.0.0.0:3000
rails7_docker_template-web-1  | Use Ctrl-C to stop

ターミナルで別タブを開き、ビルドコンテキストのあるディレクトリへ移動し
以下のコマンドを実行する。

データベースを作成
$ docker-compose run web rake db:create
テーブルを作成
$ docker-compose run web rake db:migrate

localhost:3000へアクセス

アクセス成功。

Screenshot 2026-04-13 at 23.16.22.png

まとめ

今回はrailsアプリをdockerとdocker composeでwebアプリをdocker化する方法を記載しました。テンプレのアプリなので、シンプルな構造ではありましたが、railsに必要なパッケージを指定したり、dbサービスとwebサービスを同時に立ち上げて、通信するなど、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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?