5
6

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とDocker Composeにて既存アプリの環境構築をしよう

Last updated at Posted at 2023-10-25

こんにちは!
勉強と休みのメリハリがようやくつくようになって、勉強の進みが改善してきたみんみんです。
(※なお、「仕事・勉強・寝る」だけの自称廃人生活は未だ継続中です)
今回は、DockerとDocker Composeにて既存アプリの環境構築をする方法を書いていきます!
すでにWebアプリのソースコードがGithub上にある状態から、以下2点を行います。

  • Dockerで環境構築する
  • docker compose upコマンドでrails serverを起動し、http://localhost:3000でWebアプリにアクセスできるようにする

主な手順は以下の通りです。

1. GitHub上のソースコードをローカルへクローン
2. Dockerfile、docker-compose.ymlを新規作成・内容記載
3. database.ymlを編集
4. Dockerのイメージ・コンテナ作成
5. データベース作成
6. 「http://localhost:3000」で動作確認

なお、今回の手順についてはすでにDockerがインストールされていることが前提です。

GitHub上のソースコードをローカルへクローン

まずは、GitHub上にあるソースコードをローカルへクローンします。
ターミナルを開きましょう。
以下のコマンドを実行すればクローンできます。

git clone 該当リポジトリのSSH key

Dockerfile、docker-compose.ymlを新規作成・内容記載

次に、Dockerfiledocker-compose.ymlを新規作成します。
以下のコマンドで先ほどクローンしたリポジトリへ移動し、ファイルを作成しましょう。

cd クローンしたリポジトリ名
touch Dockerfile
touch docker-compose.yml

Dockerfileの内容を記載

まずは、Dockerfileに必要事項を記載していきます(新規作成後は何も書いてありません)。
Dockerfileとは、Dockerイメージを作るために必要な設計図です。
今回の目的であるDockerコンテナを作るには、Dockerイメージを作成する必要があります。
つまり、Dockerfileを元にDockerイメージを作り、さらにDockerイメージを元にDockerコンテナを作るという流れです。

Dockerfile作成
            ↓
Dockerイメージ作成
            ↓
Dockerコンテナ作成

まずは公式リファレンスからDockerfileの雛形を持ってきて、その他必要な条件に従って記載しましょう。
例としては以下のように書きます(リポジトリ名をrails-dockerとしています)。

# 今回使用するRubyのバージョンを指定
FROM ruby:3.2.2
# 必要なパッケージの最新バージョンをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# 「rails-docker」ファイルを作成
RUN mkdir /rails-docker
# 作業ディレクトリを「rails-docker」に指定
WORKDIR /rails-docker
# 「rails-docker」にGemfileとGemfile.lockを追加
ADD Gemfile Gemfile.lock /rails-docker/
# コマンド「bundle install」を実行
RUN bundle install
# ローカルの「rails-docker」にあるファイルをコンテナ内の「rails-docker」へ追加
ADD . /rails-docker

docker-compose.ymlの内容を記載

続いて、docker-compose.ymlに必要事項を記載します。
docker-compose.ymlとは、Docker Composeというツールを使うための設定について記載しているファイルです。
Docker Composeを使えば、複数のコンテナについて条件定義・実行・管理できます。
1つのアプリを開発するには複数のコンテナを作る必要があるので、それらをバラバラに管理していては大変です。
そのためにdocker-compose.ymlで、それぞれのコンテナについて条件を定義しておきます。
先ほどと同じく、リポジトリ名をrails-dockerとした例が以下の通りです。

docker-compose.yml
# Composeファイルのバージョンを指定
version: '3'
# 各コンテナの設定
services:
# dbコンテナの設定
  db:
# イメージの設定(postgresのバージョン12を使用する)
    image: postgres:12
# postgresの環境変数としてユーザー名とパスワードを指定
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
# postgresのデータベースを/var/lib/postgresql/dataに認識させ、永続的に使えるようにする(毎回データベースを作り直す必要がなくなる)
    volumes:
      - postgresql-data:/var/lib/postgresql/data
# webコンテナの設定
  web:
# カレントディレクトリのDockerfileに基づいてwebコンテナを作成
    build: .
# 「bundle exec rails s」コマンドでrails serverを立ち上げ、3000番ポートをブラウザで表示できるように設定
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
# コンテナで作られるデータをローカルにも保存して、永続的に保存する「volume」の設定(コンテナを削除してもデータが消えなくなる)
    volumes:
# ローカル側で同期したいディレクトリとコンテナ側で同期したいディレクトリを指定
      - .:/rails-docker
# ポートをrailsのデフォルトポートである3000番に指定
    ports:
      - "3000:3000"
# dbコンテナを起動してからwebコンテナを起動するように設定
    depends_on:
      - db
# 「volume」を動かすための接続先(driver)をローカルに指定
volumes:
  postgresql-data:
    driver: local

database.ymlを編集

最後に、database.ymlを編集します。
database.ymlconfigフォルダの中にあり、Railsアプリケーションがデータベースに接続する際に必要な情報を設定しているファイルです。
すでに記載されているもの以外に、host username passwordを設定するコードを加えましょう。

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# データベースを動かすとき、dbイメージを使うように設定
  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"] %>

Dockerのイメージ・コンテナ作成

ここまでで、ようやくDockerのイメージ・コンテナを作れるための準備ができました。
さっそくターミナルでコマンドを実行していきましょう。
まずはイメージを作ります。

docker-compose build

続いてコンテナを作成し、起動します。

docker-compose up -d

両方とも少し時間がかかるので、気長に待ちましょう。

データベース作成

続いて、Railsアプリで作成したデータを保管するために必須のデータベースを作ります。
まずは先ほど作ったコンテナの中に入りましょう。

docker-compose exec web bash

普段コマンドを打つときは頭に%もしくは$がついていますが、それが#に変わっていたら無事コンテナ内に入れたという事です。
そして#の後ろに以下のコマンドを打ち、Railsのデータベースを作成しましょう。

rails db:create

そして、Railsアプリのソースコードにあるmigrationファイルの内容をデータベースに反映させます。
(※今回は深く説明しませんが、このコマンドを実行しないとエラーになります)

rails db:migrate

設定が終わったので、以下コマンドでコンテナから出ましょう。

exit

http://localhost:3000で動作確認

さて、Railsアプリは起動するでしょうか?
以下のコマンドでDockerのコンテナを一度に起動しましょう。

docker-compose up

ブラウザでhttp://localhost:3000へ行ってみて、Webアプリの内容が表示されていれば成功です!
最後は以下のコマンドで、起動したコンテナを終了しておきましょう。

docker compose down

今回は以上です!
初心者のアウトプットのため、間違いなどありましたらお手数ですがご教示いただけますとありがたいです!

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?