HOWTO · Docker

Docker Compose にネットワーク モードを追加する

この記事では、Docker Compose でネットワーク モードを使用してネットワークを定義および設定する方法について説明します。

デフォルトでは、単一のネットワークが Docker Compose によってアプリケーションに作成され、そこに各コンテナーがサービスとして追加されます。 ネットワーク上のすべてのコンテナは、単一のネットワーク上のコンテナからアクセスして見つけることができます。

Docker Compose でネットワーク モードを定義することにより、ネットワークを構成できます。 この記事では、Docker Compose でネットワーク モードを使用してネットワークを定義および設定する方法について説明します。

Docker でネットワーク情報を収集する

特定のコンテナーまたはサービスを通過するネットワーク モードを構成する場合は、最初に追加情報を収集する必要があります。 コマンド docker network ls を実行すると、現在の Docker ネットワークを一覧表示できます。

次の出力のようになります。

出力:

NETWORK ID          NAME                         DRIVER
17cc61428fef        bridge                       bridge
098522f7fce0        sample_default               bridge
1ce3c472afc6        test_default                 bridge
8fd07e456e6c        host                         host
3b5787919641        none                         null

このコマンドは、上記の前のコマンドを使用してコンテナー、サービス、またはネットワークの名前または ID を認識している必要がある場合に便利です。

Docker Compose でネットワーク モードを構成する

Docker Compose バージョン 3 では、network_mode: パラメーターとその値を指定することで、YAML ファイルでネットワーク モードを使用できます。 したがって、version: パラメータと値 3 または 3.0 を使用して、使用している Docker Compose のバージョンを指定してください。

例:

version: "3"
services:
  app:
    network_mode: "host"

上記の例では、ネットワーク モードとして host の例を使用しましたが、代わりにコンテナーまたはサービスを指定できます。 Docker の公式ドキュメントから、サービスのネットワーク モードを定義するときに使用できる複数の値を次に示します。

例:

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

以前に情報を収集したので、ネットワーク モードを定義するときにネットワーク名または ID を使用できます。

例:

network_mode: "container:sample_default"
network_mode: "container:1ce3c472afc6"

Docker Swarm でネットワーク モードを構成する

Docker アプリケーションを実行する物理マシンまたは仮想マシンの集合は、Docker Swarm と呼ばれます。 Docker Swarm と呼ばれるコンテナ オーケストレーション ソリューションを使用すると、ユーザーはさまざまなホスト マシンにまたがる多数のコンテナを制御できます。

マシンのグループが一緒にクラスター化されると、使い慣れた Docker コマンドを引き続き実行できますが、クラスター内のデバイスがそれらを実行するようになります。

残念ながら、Docker Compose と Swarm はうまく組み合わせられません。 したがって、network_mode パラメータを使用する代わりに、次のように、networks パラメータを使用して手動でネットワークを定義する必要があります。

例:

version: "3.0"
services:
    app:
        networks:
            - host

networks:
    host:
        name: [Your Network Mode Value]
        external: true