DockerとDocker Composeを使ってWebアプリをDockeriseするまで

はじめに

今回はDockerとDocker Composeを使ってWebアプリをDockeriseする方法をまとめます。

なので今回のゴールは、DockeriseしたWebアプリをhttp://localhost:3000/にアクセスして表示することです。

今回はWebアプリについてはすでGithubリポジトリにあるもの利用しています。

Dockeriseするまでのざっくりとした流れは以下の通りです。

  1. リモートリポジトリからローカルにファイルを移す
  2. DockeriseするWebアプリを定義する
  3. Webアプリをビルドする
  4. データベースを接続する

リモートリポジトリからローカルにファイルを移す

前提としてリモートとローカルの繋ぎ込みができていることを確認してから進めます。

まずはリモートからローカルにファイルをpullします。

git pull origin main

今回はdockerという作業ブランチを作成して作業するので、ブランチをきります。

git checkout -b docker

ブランチを作成して、checkoutできているか確認します。

git branch

下記のように表示されていれば成功です。

        * docker
          main
        

ここまでは事前準備でもあるので問題ないかと思います。 ブランチに移動できたので、ブランチでWebアプリをdockeriseしていきます。

DockeriseするWebアプリを定義する

ここからはWebアプリを定義していきます。 定義するにはDockerfile, Gemfile, Gemfile.lock, docker-compose.ymlの4つのファイルを作成します。

まず現在のブランチでls コマンドを使って現在あるファイルを確認します。

        Gemfile     app     db      storage
        Gemfile.lock    bin     lib     test
        README.md   config      log     tmp
        Rakefile    config.ru   public      vendor

定義をするにはDockerfiledocker-compose.ymlがないので、2つのファイルを作成します。

DockerfileにはDocker imageを作るために実行するコマンドを記載。

docker-compose.ymlにはdatabaseとwebのそれぞれのDocker imageをどのように作成するかを記載します。

ここではDockerfileやdocker-compose.ymlの詳細はふれません。 別の記事にまとめようと思います。

Webアプリをビルドする

定義ができたらWebアプリをビルドします。

docker-compose build

ここで行うことはbuildするだけですので、以上です。

データベースを接続する

いよいよ最後のステップです。 データベースの接続をします。

まずはコンテナを構築、起動します。 -dをつけてバックグラウンドで実行することが多いかと思います。

docker-compose up -d

buildとupの違いは大きく分けると下記です。

  • docker-compose buildはimageの作成
  • docker-compose upはcontainersの起動とスタート

2つを合わせることも可能です。その場合のコマンドは下記となります。

docker-compose up --build -d

upができたら初回起動時は、データベースの接続が必要になるのでdocker内に入ります。

docker-compose exec web bash

docker内ではdatabaseを生成します。

rails db:create

databaseが生成できたら、マイグレーションします。

rails db:migrate

ここまででDockeriseする作業は完了です。

CreateTasks: migratedと表示されていれば成功です。

最後にブラウザで確認します。

http://localhost:3000/にアクセスしてWebアプリが表示されていれば成功です。

ビルドしたりアップするところでうまくいかない場合は、Dockerfiledocker-compose.ymlの記載に誤りがある場合は多いので、確認してみてください。