HOWTO · Docker

Docker Network Host コマンドを使用する

この記事では、読者に docker network host コマンドの使用方法を説明します。

このページの内容

Docker コンテナーは、Docker のインストール中に作成されたネットワーク ドライバーを利用して機能します。 私たちが利用できるデフォルトのドライバーには、bridgehost ネットワークが含まれます。

ネットワークを指定せずにコンテナを作成すると、コンテナは bridge ネットワークに追加されます。network コマンドを host ネットワークまたはカスタム ネットワークに追加する場合は、--network コマンドを使用します。 .

このチュートリアルでは、--network コマンドを使用してコンテナを host ネットワークに追加する方法を学びます。 また、このコマンドを使用してネットワークを指定しない場合に、コンテナがデフォルト ネットワークに追加される方法についても学習します。

Nginx プロジェクトを作成する

WebStorm IDEA を開き、File > New > Project を選択します。 開いたウィンドウで空のプロジェクトを選択し、プロジェクト名を無題からdocker-network-hostに変更するか、任意の名前を使用します。

最後に、Create というラベルの付いたボタンを押して、プロジェクトを生成します。

現在のフォルダーに index.html という名前のファイルを作成し、次のコードをコピーしてファイルに貼り付けます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Welcome to docker networking !</h1>
</body>
</html>

このファイルでは、コンテナーで実行されているアプリケーションにアクセスしたときに見出しを表示する単純な Web ページを作成しました。 これは、コンテナが Nginx アプリケーションを実行していることを確認するのに役立ちます。

イメージを定義する

Dockerfile という名前のファイルを作成し、次の命令をコピーしてファイルに貼り付けます。 通常、この名前のファイルを使用して、既存の画像からカスタム画像を作成することに注意してください。

FROM nginx:alpine
ADD . /usr/share/nginx/html
  1. FROM - 以降の手順を使用してカスタム イメージを作成するベース イメージを設定します。
  2. ADD - 現在のフォルダー内のファイルとフォルダーを画像ファイル システムの宛先 /usr/share/nginx/html にコピーします。

イメージを構築する

上で定義した Dockerfile を使用してカスタム イメージをビルドするには。 キーボード ショートカット ALT+F12 を使用して新しいターミナル ウィンドウを開き、このコマンドを使用してイメージをビルドします。

~/WebstormProjects/docker-network-host$ docker build --tag docker-network-host:latest .

このコマンドは、Dockerfile を順番に実行してタグ付きのイメージを作成します。以下に示すように、ターミナル ウィンドウで実行中の各命令を表示できます。

=> [1/2] FROM docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => => resolve docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => CACHED [2/2] ADD . /usr/share/nginx/html

デフォルトのネットワーク ドライバーでコンテナーを実行する

アプリケーションのコンテナーをデフォルト ネットワークで実行するには、ターミナル ウィンドウで以下のコマンドを実行します。 このコンテナは bridge ネットワークに追加されることに注意してください。

~/WebstormProjects/docker-network-host$ docker run --name docker-network-bridge-test -d -p 8000:80 docker-network-host:latest

このコマンドは、コンテナー内のポート 80 でリッスンし、ホストでポート 8000 を公開する docker-network-bridge-test という名前のコンテナーを実行します。 このコンテナが bridge ネットワークに追加されたことを確認するには、以下のコマンドを実行して bridge ネットワークを調べます。

~/WebstormProjects/docker-network-host$ docker network inspect bridge

出力:

[
    {
        "Name": "bridge",
        "Id": "45773c7633cf28baa742ceca9c054a8dd6b4ea609dd9944d7ae12bdb57e86bcd",
        "Created": "2022-10-06T07:53:45.935633743Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5e452da9b047ce94ff23b4841d1cb3358f34b037ef566c2f12a9eb57012a5f85": {
                "Name": "docker-network-bridge-test",
                "EndpointID": "d3491eb0c518d91be71b170e8ca0a077e07781bffbe20f3e1a1fd415eef9c288",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

返された JSON では、Containers プロパティに docker-network-bridge-test という名前のコンテナーがあり、MacAddressIPv4Address が割り当てられています。 これは、このセクションの最初に作成したコンテナーと同じです。

このアプリケーションをブラウザーで提供するには、localhost:8000 (http://localhost:8000/) にリクエストを発行し、Docker ネットワークへようこそ ! というテキストを含むヘッダーが返されるようにします。

ホスト ネットワークでコンテナを実行する

ホスト ネットワークという用語は、ホスト ネットワークがコンテナー ネットワークをコンテナー化できないため、コンテナーがホスト マシンのネットワーク上で実行されることを意味します。 ホスト ネットワークでコンテナーを実行するには、ターミナル ウィンドウで次のコマンドを実行します。

~/WebstormProjects/docker-network-host$ docker run --rm -d --network host --name docker-network-host-test docker-network-host:latest

このコマンドは、--network コマンドと host の値を使用して、ホスト ネットワークで docker-network-host-test という名前のコンテナーを実行します。 このコンテナーがホスト ネットワークに追加されたことを確認するには、ターミナル ウィンドウで次のコマンドを実行します。

~/WebstormProjects/docker-network-host$ docker network inspect host

出力:

[
    {
        "Name": "host",
        "Id": "4ce9d3806cd88f9d9ea446272f4338f7b1f5e7098d4d0bc2a11090c1759d1880",
        "Created": "2022-09-19T07:51:50.247290701Z",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "22d15c7eee861ec7fdfd22936c30dfe1d17b2dde52ada93256f3e30943a3ed80": {
                "Name": "docker-network-host-test",
                "EndpointID": "7bd01907c8b86a881b86ae9e9c8ad8c1d3aa9f0583adebb7d41ae15bd565fabe",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

返された JSON では、Containers プロパティに docker-network-host-test という名前のコンテナーが含まれています。 ホストネットワーク。 これは、このセクションの最初に作成したコンテナーと同じです。

このアプリケーションをブラウザーで提供するには、localhost:80 (http://localhost:80/) にリクエストを発行し、Docker ネットワークへようこそ ! というテキストを含むヘッダーが返されるようにします。 ただし、ホスト ネットワークのポート 80 がリクエストを受け入れるように開いていることを確認してください。

まとめ

このチュートリアルでは、デフォルトのネットワーク ドライバー bridgehost ネットワーク ドライバーの両方でコンテナーを実行する方法を学びました。 --network コマンドを使用して、デフォルト ネットワーク以外の別のネットワークにコンテナを追加することに注意してください。

アプリケーションが新しいネットワークで動作していることを確認するには、使用するポートが接続用に開いていること、および別のプロセスがそのポートを使用していないことを確認してください。