ネットワーク概要

Docker コンテナーやサービスの機能が強力である理由は、これらを互いに接続することができ、あるいは Docker ではないシステムとも接続ができる点です。 Docker コンテナーやサービスはどちらも、Docker によってデプロイされたものであるかを知っておく必要がなく、さらに接続された先が Docker によるものかどうかすら、わかっていなくてよいのです。 Docker ホストが Linux や Windows 上で、あるいはその両方が混在した上で動作しているとしても、Docker を使えばプラットフォームに依存せずに Docker ホストを管理することができます。

ここでは Docker ネットワークの基本的な考え方を紹介し、Docker の機能を最大限活用したアプリケーションの設計とデプロイができるようにしていきます。

説明を行う範囲

Docker ネットワークがどのように動作するのかに関して、OS 固有の話にまで踏み込んで説明するつもりは ありません。 したがって Linux 上において Docker がどのようにしてiptablesルールを処理するのか、Windows Server 上にてルーティング規則をどのように処理するのか、といった情報を示すことはありません。 さらに Docker がパケットを構成しカプセル化する様子や暗号化を取り扱うところに関して、詳細情報も示しません。 技術的にかなり踏み込んだ詳細に関しては Docker と iptable を参照してください。

上に加えてこの説明においては Docker ネットワークの生成、管理、利用に関するチュートリアルも含んでいません。 各節では、対応するチュートリアルやコマンドリファレンスはリンクとして示しています。

ネットワークドライバー

Docker 内のサブシステムであるネットワーク機能は、ドライバーを利用したプラガブル(pluggable)なものです。 デフォルトで数種のドライバーがあり、基本的なネットワーク機能が提供されています。

  • bridge(ブリッジ): デフォルトのネットワークドライバー。 ドライバーを指定しなかった場合、生成したネットワークのタイプがこのドライバーになります。 ブリッジネットワークは通常、アプリケーションがいくつかのスタンドアロンコンテナー上に動作していて、コンテナーが互いに通信を必要とする場合に利用されます。 ブリッジネットワーク を参照してください。

  • host(ホスト): スタンドアロンコンテナーにおいて、コンテナーと Docker ホスト間でのネットワーク隔離を取り除き、ホストのネットワーク機能を直接利用します。 ホストネットワークの利用 を参照してください。

  • overlay: オーバーレイネットワークは、複数の Docker デーモンを接続します。 そして swarm サービスによる相互の通信を可能にします。 またオーバーレイネットワークは、swarm サービスとスタンドアロンコンテナーとの間での通信、あるいは異なる Docker デーモン上の 2 つのスタンドアロンコンテナー間での通信を容易に実現します。 この方法を使えば、コンテナー間での OS レベルのルーティングは不要となります。 オーバーレイネットワーク を参照してください。

  • ipvlan: IPvlan ネットワークは、IPv4 と IPv6 のアドレッシングが、完全にユーザーにより制御可能となります。 VLAN ドライバーがその上に構築されているため、アンダーレイネットワーク統合に関心のあるユーザーにとっては、レイヤー 2 VLAN タギングや IPvlan L3 ルーティングでさえ、完全に制御可能としています。 IPvlan ネットワーク を参照してください。

  • macvlan: Macvlan ネットワークは、コンテナーに対して MAC アドレスを割り当てられるようにし、ネットワーク上の物理デバイスであるかのように見せることができます。 Docker デーモンはその MAC アドレスによって各コンテナー間のトラフィックを処理します。 macvlanドライバーは、古いアプリケーションを取り扱う際、Docker ホストのネットワーク層を通じての処理ではなく、物理ネットワークに直接接続することが求められている場合に、ベストな選択となる場合があります。 Macvlan ネットワーク を参照してください。

  • none: これが指定されたコンテナーでは、ネットワーク機能がすべて無効化されます。 通常はカスタムネットワークドライバーと組み合わせて利用されます。 noneは swarm サービスに対して利用することはできません。 コンテナーのネットワーク無効化 を参照してください。

  • ネットワークプラグイン: Docker では、サードパーティー製のネットワークドライバーをインストールして利用することができます。 プラグインは Docker Hub から、あるいはサードパーティーベンダーから入手することができます。 プラグインのインストール手順や利用方法については、ベンダー各社のドキュメントを参照してください。

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

  • ユーザー定義ブリッジネットワーク は、同一 Docker ホスト上で複数コンテナーが通信する場合に利用します。
  • ホストネットワーク は、ネットワーク層が Docker ホストとは隔離されないことが必要な場合、そしてコンテナーの隔離は別の観点で必要な場合に利用します。
  • オーバーレイネットワーク は、異なる Docker ホスト上においてコンテナーが互いに通信する必要がある場合に利用します。 あるいは swarm サービスを利用して複数アプリケーションを動作させる場合に利用します。
  • Macvlan ネットワーク は、VM 環境から移行する場合や、ネットワーク上の物理ホストのようにコンテナーを扱う必要がある場合に利用します。 個々においては固有の MAC アドレスが用いられます。
  • サードパーティー製ネットワークプラグイン は、Docker に特別なネットワークスタックを統合します。

ネットワークに関するチュートリアル

Docker ネットワークの基本について理解してきました。 以下のチュートリアルを通じて、さらに理解を深めてください。

networking, bridge, routing, routing mesh, overlay, ports