2023-01-29
複数のDocker Compose環境で通信を行いたい場合は共有するNetworkを設定する必要があります。
ここでは、redisのDBサーバーとPythonのwebサーバーを別のdocker-compose.yml
ファイルで作成して Docker Networkの共有を行ってみます。
ディレクトリの階層は以下のようにしました。
db/配下の docker-compose.yml
とweb/配下の
docker-compose.yml`の2種類があります。
各ディレクトリに入り、以下のコマンドをそれぞれ実行します。
今回の構成の場合はdbがwebに依存する作りになっており、webの方からコンテナを起動する必要があります。
ブラウザで
http://localhost:8000/ にアクセスすると、
Hello World! I have been seen 1 times.
のテキストが表示されると正常に動作していることになります。
アクセス数によって、数値がインクリメントされていきます。
以下のネットワークが生成されます。
Containers の中にデフォルトで生成されるネットワークが含まれていることが確認できます。
db/docker-compose.yml
の部分でトップレベルのnetworkキー、ここでは、
の部分のエントリを参照しています。
external
をtrue
にした場合はこのdocker-compose.ymlで管理しない外部のネットワークを利用します。
NETWORK_IDという変数をname
に設定していて、外部の実装に依存しないようにしています。
https://docs.docker.jp/compose/compose-file/index.html#external > https://docs.docker.jp/compose/compose-file/index.html#id51
web/Dockerfile
db
という名前のネットワークを作成するため、トップレベルのnetworksエントリにネットワークの設定があります。
このネットワークをredis側より参照します。
web/app.py
web/requirements.txt
その他、Webサーバーの実装については本題とずれるため解説しません。
ちなみにnetworkの設定がないと、webサーバーがredisに接続できず、ブラウザ側では500エラーとなります。
コンソールには、以下のようなエラーメッセージが表示されます。