[docker] コンテナのネットワークとは?

スポンサーリンク

概要

Dockerコンテナを他のコンテナやホストと通信させるためには、コンテナ=コンテナ、コンテナ=ホスト、のネットワークが必要である。

ネットワークには、Dockerがデフォルトで用意しているネットワークとDocker Composeなどでユーザーが作成したネットワークがある。

デフォルトのネットワーク

Dockerはデフォルトで以下の3つのネットワークを作成する。

  1. bridge
    コンテナ間、コンテナ外と通信できるネットワーク
  2. host
    ホストのネットワークをそのまま使う
  3. none
    通信できない

※ 主に使われるのはbridgeだけであり、hostとnoneを使うことはまずない
docker container runでnetworkが指定されなかった場合、bridgeに接続される

bridgeは
「IPで通信する必要がありコンテナ名では通信ができない」
「無関係のコンテナ間で通信できてしまう」
など不便なので、ユーザーが作成したネットワークを利用することが推奨されている。

Docker Composeなどでユーザーが作成したネットワーク

  • Docker Composeでは、専用のネットワーク(bridgeと同様にコンテナ間、コンテナ外と通信できる)がデフォルトで作成される。
  • このネットワークのおかげで、compose.ymlて定義したコンテナ間ではコンテナ名を指定して通信することができる。
  • bridgeネットワークでもコンテナ名でアクセスできるようにするために、linkオプションを使う例が紹介されていることがあるが、linkオプションは非推奨となっているので使うべきではない。
    ユーザーが作成したネットワークを使うべき。
  • Docker Composeではデフォルトでネットワークが作成されるが、compose.yamlの大項目volumesにネットワーク名を記述することで明示的に作成することができる。
    明示的に作成すると高度な設定が可能だが、検証や学習に利用する場合、明示的に作成することはほぼない。

おすすめ書籍

コメント