ネットワーク機能の概要

Docker コンテナとサービスが非常に強力な理由の1つは、コンテナやサービスを一緒に接続したり、あるいは Docker 以外のワークロードと接続できるからです。Docker コンテナとサービスは、 Docker 上にデプロイしていることを気にかける必要が全くありません。また、それらの接続先が Docker かどうかも関係ありません。Docker ホストを Linux や Windows 上で実行しても、あるいはこれら2つを混ぜたとしても、Docker はこれらをプラットフォームに関係無く管理できます。

このトピックでは、いくつかの基本的な Docker のネットワーク機能についての概要を定義し、これらの機能を最大限に活用するアプリケーション設計およびデプロイの準備をします。

このトピックで扱う範囲

このトピックでは Docker ネットワークの挙動について、 OS 固有の詳細は 扱いません 。そのため、Linux 上で iptables のルールを Docker がどのように作業しているかや、Windows サーバ上でのルーティング・ルールの扱いや、Docker がどのようにパケットをカプセル化して暗号化を処理するかについて、扱っていません。より深い技術的詳細については、 Docker と iptablesDocker リファレンス・アーキテクチャ:スケーラブルでポータブルな Docker コンテナ・ネットワークの設計 (英語) にあります。

加えて、このトピックではどのようにして Docker ネットワークを作成、管理、使うかについてのチュートリアルはありません。各セクションには関連するチュートリアルやコマンド・リファレンスへのリンクがあります。

ネットワーク・ドライバ

Docker のネットワーク機能(networking)サブシステムとは、ドライバを利用するプラガブル(pluggable:取り付け、取り外しが自由という意味)なものです。複数のドライバがデフォルトで存在し、これらはネットワーク機能群の中核を備えています。

  • bridge : デフォルトのネットワーク・ドライバです。ネットワーク作成時にドライバを指定しなければ、このネットワークになります。 通常、ブリッジ・ネットワークは、アプリケーションがスタンドアロン・コンテナ内で動作する時、このコンテナが通信するために使います 。詳しくは ブリッジ・ネットワーク をご覧ください。
  • host :スタンドアロン・コンテナ用で、コンテナと Docker ホスト間のネットワーク隔離を解除し、ホスト側のネットワーク機能を直接使います。swarm サービスでは、 host は Docker 17.06 以上でのみ利用できます。 host ネットワークを使う をご覧ください。
  • overlay :オーバレイ・ネットワークは複数の Docker デーモンと同時に接続し、swarm サービスが相互に通信可能にします。また、オーバレイ・ネットワークを使い、swarm サービスとスタンドアロン・コンテナ間での通信を簡単にします。あるいは、異なる Docker デーモン上で動作する2つのスタンドアロン・コンテナ間で通信できるようにします。この方法を使えば、コンテナ間で OS レベルのルーティング設定を不要にします。 オーバレイ・ネットワーク をご覧ください。
  • macvlan :macvlan ネットワークは、コンテナに対して MAC アドレスを割り当て可能にし、ネットワーク上の物理デバイスとして見えるようにします。Docker デーモンはコンテナの Mac アドレスに従い、トラフィックをコンテナに対して転送します。 macvlan ドライバの利用は、レガシーなアプリケーションとのやりとり時にベストな選択肢となるでしょう。たとえば、Docker ホストのネットワーク・スタックを使って転送するのではなく、物理ネットワークに対する直接接続を想定している場合です。 macvlan ネットワーク をご覧ください。
  • none :コンテナに指定すると、全てのネットワーク機能を無効化します。通常はカスタム・ネットワーク・ドライバとの競合を避けるために掴ます。 none は swarm サービスでは利用できません。 コンテナ・ネットワーク機能の無効化 をご覧ください。
  • ネットワーク・プラグイン :Docker にサードパーティ製のネットワーク・プラグインをインストールして利用できます。これらのプラグインは Docker Hub 上もしくはサードパーティ・ベンダによって提供されています。対象となるネットワーク・プラグインのインストールや利用にあたっては、ベンダのドキュメントをご覧ください。

ネットワーク・ドライバまとめ

  • ユーザ定義ブリッジ・ネットワーク(user-defined bridge network) は、同じ Docker ホスト上で、複数のコンテナ間で通信が必要な場合にベストです。
  • ホスト・ネットワーク(host network) は、Docker ホスト上でネットワーク・スタックを隔離したくないものの、隔離されたコンテナとの通信も必要な場合にベストです。
  • オーバレイ・ネットワーク(overlay network) は、異なる Docker ホスト上で実行しているコンテナ間で通信が必要な場合や、swarm サービスを使った複数のアプリケーションを同時に動かす場合にベストです。
  • macvlan ネットワーク(macvlan network) は、仮想マシンのセットアップからの移行や、コンテナがネットワーク上の物理等のホストに接続が必要であれば、それぞれでユニークな MAC アドレスが必要な場合にベストです。
  • サードパーティ・ネットワーク・プラグイン は、特別なネットワーク・スタックと Docker を統合できます。

ネットワーク機能チュートリアル

以上で、Docker ネットワークの基礎について理解しました。理解を深めるために、以下のチュートリアルをご利用ください。

  • network-tutorial-standalone
  • network-tutorial-host
  • network-tutorial-overlay
  • network-tutorial-macvlan

参考

Networking overview
https://docs.docker.com/network/