Docker コンテナー・ネットワークを使用する

2016年 9月 01日
PDF (190 KB)
 
Pradipta's photo

Pradipta Banerjee

Docker & Power Cloud Architect

Pradipta Banerjee is Docker & Power Cloud Architect, Linux Technology Center.

Docker コンテナー・ネットワークの概要

 

セキュアに連動する Web アプリケーションを構築するには、Docker のネットワーク機能を使用してください。ネットワークとは、定義上、コンテナーを完全に分離するためのものです。したがって、アプリケーションの実行場所とするネットワークを制御することが重要となります。その制御を可能にするのが、Docker コンテナー・ネットワークです。

このセクションでは、Docker エンジンがネイティブに提供するデフォルトのネットワーキング動作の概要を説明します。Docker エンジンがデフォルトで作成するネットワークのタイプについて解説し、独自のユーザー定義ネットワークを作成する方法を紹介します。

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

 

Docker をインストールすると、3 つのネットワークが自動的に作成されます。docker network ls コマンドを使用すると、自動的に作成されるこれらのネットワークを一覧表示できます。

$ docker network ls
NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

これら 3 つのネットワークは、Docker の一部として実装されます。コンテナーを実行する際に、どのネットワークでコンテナーを実行するかを指定するには、--net フラグを使用します。特定のネットワークを指定したとしても、3 つすべてのネットワークを引き続き利用できます。

  • bridge ネットワークは、Docker をインストールしたすべての環境に存在する docker0 ネットワークを表します。docker run --net=<ネットワーク> オプションを指定しない限り、Docker デーモンはデフォルトでこのネットワークにコンテナーを接続します。ホスト上で ifconfig コマンドを使用すると、この bridge ネットワークがホストのネットワーク・スタックの一部として表示されます。
  • none ネットワークは、コンテナー固有のネットワーク・スタックにコンテナーを追加します。none コンテナーにはネットワーク・インターフェースがありません。
  • host ネットワークは、ホスト・ネットワーク・スタックにコンテナーを追加します。コンテナー内のネットワーク構成を見ると、それがホストのネットワーク構成とまったく同じであることがわかります。

ユーザー定義ネットワーク

 

独自のユーザー定義ネットワークを作成すると、コンテナーをさらに確実に分離できます。Docker には、そのようなネットワークを作成するためのデフォルトのネットワーク・ドライバーが用意されています。これらのネットワーク・ドライバーを使用して、新しい bridge ネットワークを作成したり、ネットワークをオーバーレイしたりできます。さらに、ネットワーク・プラグインやリモート・ネットワークを独自の仕様に合わせて作成することもできます。
複数のネットワークを作成することも、コンテナーを複数のネットワークに追加することも可能ですが、コンテナーが通信できるのはネットワーク内に限られます。コンテナーが、ネットワークをまたいで通信することはできません。例えば、あるコンテナーが2 つのネットワークに接続されている場合、そのコンテナーはどちらのネットワーク内のメンバー・コンテナーとも通信できます。コンテナーが複数のネットワークに接続される場合は、内部ネットワークではない、辞書順で最初のネットワークを介して外部接続が提供されます。

Power 上にオーバーレイ Docker ネットワークを作成する

 

Docker はデフォルトで、docker0 ブリッジに対応する bridge ネットワークを作成しますが、ユーザーが独自のネットワークを作成することもできます。docker network コマンドには、ネットワークを管理するために使用できる多数のオプションがあります。

[root@localhost ~]# docker network create test-network
e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21

[root@localhost ~]# docker network inspect test-network
[
    {
        "Name": "test-network",
        "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {},
        "Options": {}
    }
]

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER
e12f674fea62        bridge              bridge              
0151f24befe9        host                host                
e2f569d57eb8        test-network        bridge              
e72a1d986a84        none                null

上記の他にも使用できるオプションがあります (--subnet--gateway--ip-range など)。詳細を表示するには、docker network –help または docker network [COMMAND] –help コマンドを使用してください。
コンテナーをネットワークに接続するには、コンテナーを作成する際に、明示的に接続先ネットワークを指定します。

[root@localhost ~]# docker run -itd --name=test1 --net=test-network ppc64le/busybox /bin/sh
7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113
[root@localhost ~]# docker network inspect test-network
[
    {
        "Name": "test-network",
        "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {
                "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

コンテナーを動的にネットワークに接続することもできます。

[root@localhost ~]# docker run -itd --name=test2 ppc64le/busybox /bin/sh
69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a

[root@localhost ~]# docker network connect test-network test2
[root@localhost ~]# docker network inspect test-network
[
    {
        "Name": "test-network",
        "Id": "e2f569d57eb8506602fdfc3e8a20b12073782dcfd6046ce4ef76de8db3275d21",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "69d79cddbdf8a920d24993bfc16e8d064479327d8cc23f10ae25e96a2b9b057a": {
                "EndpointID": "5dc4877e71eca2243167e97153d56c5334d98991fcc3eb2f7f968d0b68416255",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "7699fe682353835166482d1416a70f0361ddf88940bd7102e2f84f6d46b3d113": {
                "EndpointID": "cf1f3e319a1c1ec83c3eaf0d5380b9ee50c1f2d37e713425996ada6788f8e77a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

コメントの追加

注意: HTML コードは、コメント内ではサポートされません。


残り 1000 文字

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1036782
ArticleTitle=Docker コンテナー・ネットワークを使用する
publish-date=09012016