Docker Network Host コマンドを使用する
Docker コンテナーは、Docker のインストール中に作成されたネットワーク ドライバーを利用して機能します。 私たちが利用できるデフォルトのドライバーには、bridge
と host
ネットワークが含まれます。
ネットワークを指定せずにコンテナを作成すると、コンテナは 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
FROM
- 以降の手順を使用してカスタム イメージを作成するベース イメージを設定します。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
という名前のコンテナーがあり、MacAddress
と IPv4Address
が割り当てられています。 これは、このセクションの最初に作成したコンテナーと同じです。
このアプリケーションをブラウザーで提供するには、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
がリクエストを受け入れるように開いていることを確認してください。
まとめ
このチュートリアルでは、デフォルトのネットワーク ドライバー bridge
と host
ネットワーク ドライバーの両方でコンテナーを実行する方法を学びました。 --network
コマンドを使用して、デフォルト ネットワーク以外の別のネットワークにコンテナを追加することに注意してください。
アプリケーションが新しいネットワークで動作していることを確認するには、使用するポートが接続用に開いていること、および別のプロセスがそのポートを使用していないことを確認してください。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub