LoginSignup
1
0

More than 1 year has passed since last update.

【Docker】複数のContainerをDockerでつないでみた no.13

Posted at

パンプキン カフェ (2).png

こんにちは。まゆみです。

Dockerについての記事をシリーズで書いています

以前にno.11の記事で、複数のContainerを『docker-compose』を使ってつなぐことを紹介させていただきました。

※docker-composeのロゴをまねてみました。(笑).png

今回の記事では、

docker-compose ではなく、『Docker』を使って複数のContainerをつなごうと思ったらどれだけ面倒くさいかという、やや自虐的な実験をやってみましたので記事にまとめていきます。

ただ、この面倒くさいプロセスを実際に試してみることで、どのようにネットワークが構築されているかを身をもって理解する事ができました。

この面倒くさい経験を、みなさまと共有させていただきます。

今回作るアプリ

『作った』と言っても、コードはgit hubより、拝借させていただきました。

github のコードはこちらからどうぞ

ネットワーク構築の概要は下記のようになっています。

2021-06-13_9-58-29.png

アプリの概要は

Dog か Catどちらが好きか?を投票して、集計してデータベースに収めた結果をまた表示させる

というものです。

git cloneでリポジトリの複製をする

赤の➡で示されているファイルのアイコンをクリックして、コピーする
2021-06-13_10-01-29.png

2021-06-13_10-04-54.png

Dockerfileをbuildする

voteディレクトリの中にある、Dockerfile をbuildします。(-t voting-app というオプションを付け、voting-appという名前のついたImageを作りました)

2021-06-13_10-08-57.png

docker build -t voting-app .

2021-06-13_10-12-48.png

では、作ったImageからContainerを起動してみます。Webアプリなので、ポートマッピングして実行する事を忘れずに。

docker run -p 5000:80 voting-app

そして、localhost:5000にアクセスしてみます。

無事に表示されました。

2021-06-13_10-20-25.png

ただ、ここで犬か猫かの投票をしようとどちらかのボタンをクリックすると、エラーが出ます。

2021-06-13_10-23-05.png

ターミナルに戻ると、redisとつながっていないことが原因でエラーが出ていることが分かります。

まだ、redisのContainerを起動していないですし、当然と言えば当然ですね。

2021-06-13_10-24-31.png

redisのContainerを起動する

redis Containerを

ディタッチモードで (-d オプションを付ける)
redis という名前を付けて (--name="redis" というオプションを付ける)

起動させます。

docker run -d --name=="redis" redis

redisが起動したことを確かめてから、先ほどDockerfile から作ったImage(voting-appと名前を付けたやつ)から再びContainerを起動させます。

注意点
redis とvoting-appをつなげるために、--link redis:redisというオプションを付けて実行します

docker run -p 5000:80 --link redis:redis voting-app

localhost:5000にアクセスして、CATS かDOGSのボタンをクリックしてみると、今回はちゃんとチェックマークがつきました。

2021-06-13_10-56-31.png

Postgresを準備する

voting-app ➡ redis とつながったので、次はworkerにと言いたいところですが、その前提として、Postgresを起動させましょう

git hub の

example-voting-app > docker-compose.yml

に使用するべきPostgreのバージョンが載っていますので、そのバージョンのPostgreのContainerを実行させます。

2021-06-13_11-04-34.png

2021-06-13_11-01-39.png

docker run -d --name="db" postgres:9.4    

注意点
上記のコードで、Containerは起動するけどPostgreが動いたままにならない場合は下記のコードで試してみてください。

docker run -d --name=db -e POSTGRES_PASSWORD=postgres postgres:9.4

ではworkerディレクトリーにある、DockerfileからImageを作ります。

docker build -t worker-app .

Architecture の概要を見てもらえればわかるように、workerはPostgreとredisとつながっていますので、

--link オプションで

workerと二つのサーバーをつなげて実行させます

docker run --link redis:redis --link db:db worker-app

result ディレクトリのDockerfile を実行する

最後に、投票結果を集計して結果を表示するresult-appのDockerfileを起動させます。

resultディレクトリの中のDockerfileを実行してください。

docker build -t result-app .

Imageが作り終わった後、このImageを使ってContainerを実行します。

docker run -p 5001:80 --link db:db result-app

localhost:5001にアクセスしてみましょう

2021-06-13_11-43-29.png

voting-appであなたがCATSに投票していたなら、CATSが100%として表示されているはずです。

まとめ

今回の記事では、コードはgit hub から拝借して、どのContainer とどのContainerをつなげるべきかということに焦点を置いて書かせていただきました。

あえて、docker-composeを使わず、DockerCLIを使ってみました。

とても面倒くさかったです。(笑)

次回は同じアプリを『docker-compose』を利用して起動させてみたいと思います

1
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
1
0