はじめに
今回はDockerとDocker Composeを使ってWebアプリをDockeriseする方法をまとめます。
なので今回のゴールは、DockeriseしたWebアプリをhttp://localhost:3000/
にアクセスして表示することです。
今回はWebアプリについてはすでGithubのリポジトリにあるもの利用しています。
Dockeriseするまでのざっくりとした流れは以下の通りです。
- リモートリポジトリからローカルにファイルを移す
- DockeriseするWebアプリを定義する
- Webアプリをビルドする
- データベースを接続する
リモートリポジトリからローカルにファイルを移す
前提としてリモートとローカルの繋ぎ込みができていることを確認してから進めます。
まずはリモートからローカルにファイルを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
定義をするにはDockerfile
とdocker-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アプリが表示されていれば成功です。
ビルドしたりアップするところでうまくいかない場合は、Dockerfile
やdocker-compose.yml
の記載に誤りがある場合は多いので、確認してみてください。