LoginSignup
5
1

More than 1 year has passed since last update.

Docker Composeで作成されるコンテナネットワークの確認

Last updated at Posted at 2022-09-10

目的

Docker Composeを使って作成されたコンテナたちは同一のネットワーク環境に属しているのかを確認していきます。

検証環境は先日記事にしたDockerとWSL2を使ってReact&Django&MySQLの開発環境を作るを利用します。

全体イメージはこんな感じです。

対象は上図のMySQL,Reat,Djangoが入っているコンテナになります。
docker-compose upコマンドで作成されたこれら環境に対して各コンテナのネットワーク状況を見ていきます。

Dockerコンテナのネットワークについて

コンテナのために完全に分離された環境と定義されています。
Docker Composeで作成されたコンテナグループはデフォルトで同一のネットワークに所属するようです。(今回の確認事項)

詳しくはこちらの公式も参照してください。

それぞれのコンテナのネットワークを確認

コンテナ及びネットワークの確認

まずは立ち上げられたコンテナたちのIDを取得します。

> docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS                               NAMES
37e563215f73   project_handson-back    "python3"                2 minutes ago   Up 2 minutes   0.0.0.0:8000->8000/tcp              my-back
1138890b6da0   mysql:8.0.23            "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   33060/tcp, 0.0.0.0:3308->3306/tcp   my-db
d2ac311ff7c3   project_handson-front   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3000->3000/tcp              my-front

次に作成されたネットワークを確認します。
「{docker-compose.ymlが格納されているフォルダ名}_default」というネットワークができていることが確認できます。(今回はproject_default)
他に3つほどネットワークがありますが、それらはデフォルトで用意されているモノになりますので今回は無視していきます。

> docker network ls
NETWORK ID     NAME                    DRIVER    SCOPE
d36c75ca16f0   bridge                  bridge    local
07cfce906ce6   host                    host      local
454bad48e854   none                    null      local
9542cb87b241   project_default         bridge    local

フロントエンド用コンテナのネットワーク

docker inspect <コンテナID>を使ってコンテナ情報の詳細を表示します。
ここでは--formatオプションを使ってネットワークID情報のみを抽出します。

> docker inspect --format='{{range .NetworkSettings.Networks}}{{.NetworkID}}{{end}}' d2ac311ff7c3
9542cb87b2415f8e40ced2a3452b52548dfbdb3938eb6c8298afbb78867af8f2

バックエンド用コンテナのネットワーク

同様に

> docker inspect --format='{{range .NetworkSettings.Networks}}{{.NetworkID}}{{end}}' 37e563215f73
9542cb87b2415f8e40ced2a3452b52548dfbdb3938eb6c8298afbb78867af8f2

データベース用コンテナのネットワーク

同様に

> docker inspect --format='{{range .NetworkSettings.Networks}}{{.NetworkID}}{{end}}' 1138890b6da0
9542cb87b2415f8e40ced2a3452b52548dfbdb3938eb6c8298afbb78867af8f2

以上より。。。

どのコンテナもネットワークIは「9542cb87b2415f8e40ced2a3452b52548dfbdb3938eb6c8298afbb78867af8f2」となっている。
これよりDocer Composeによって作られたネットワークと同じことが確認できる。

> docker network ls
NETWORK ID     NAME                    DRIVER    SCOPE
d36c75ca16f0   bridge                  bridge    local
07cfce906ce6   host                    host      local
454bad48e854   none                    null      local
9542cb87b241   project_default         bridge    local <-------- これ

コンテナ間の接続方法

ここまでで、各コンテナが同一のネットワークに所属していることが分かりました。
ついでにコンテナ間の接続URLも確認しておきましょう。

再度inspectコマンドを使ってネットワーク配下のエイリアスを取得します。

> docker inspect --format='{{range .NetworkSettings.Networks}}{{.Aliases}}{{end}}' 37e563215f73
[my-back handson-back 37e563215f73]

取得できた値はそれぞれ

  • my-back:サービス名
  • handson-back:コンテナ名
  • 37e563215f73:コンテナID

となります。

つまり、http://{エイリアス名}のようにすればコンテナ間にて接続を行えます。
具体的にはこんな感じです。

http://my-back:8000

まとめ

Docker Composeで作られたコンテナ群はデフォルトで同一のネットワークに所属することが分かりました。
コンテナ単品で作成していく際は、ネットワークの作成及び明示的にどのネットワークに所属するかも指定しないといけません。
その辺を全部自動でやってくれるのは流石という感じですね。

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