ホストネットワークのチュートリアル
このチュートリアルでは、スタンドアロンコンテナーのネットワークを取り扱います。 Docker ホストのネットワークに直接割り当てられ、ネットワークの分離は行われません。 これ以外のネットワークに関することは ネットワーク概要 を参照してください。
目指すこと
本チュートリアルの目標は、nginx
コンテナーを起動させ、Docker ホスト上のポート 80 に直接割り当てることです。
ネットワークの観点からはnginx
のプロセスが、コンテナー内でなく Docker ホスト上で直接稼動している場合と同じレベルの分離が実現されていると言えます。
ただしこれ以外の点、つまりストレージ、プロセス名前空間、ユーザー名前空間などから見ると、nginx
のプロセスはホストから分離されています。
前提条件
-
以下の手順においては、Docker ホスト上のポート 80 が利用できることが必要です。 Nginx が別のポートを利用できるようにするには
nginx
イメージのドキュメント を参照してください。 -
host
ネットワークドライバーは Linux ホスト上においてのみ動作します。 一方、Docker Desktop for Mac、Docker Desktop for Windows、Docker EE for Windows Server ではサポートされていません。
手順
-
コンテナーを生成し、デタッチモードで起動します。
--rm
オプションは、コンテナーが終了または停止したときにコンテナーを削除するものです。-d
フラグは、コンテナーをデタッチモード(バックグラウンド)で起動します。$ docker run --rm -d --network host --name my_nginx nginx
-
ブラウザーから http://localhost:80/ を入力して Nginx にアクセスします。
-
以下のコマンドを実行して、ネットワークの状況を確認します。
-
ネットワークインターフェースをすべて確認します。 そして新しいインターフェースは生成されていないことを確認します。
$ ip addr show
-
netstat
コマンドを使って、どのプロセスがポート 80 に割り当てられているかを確認します。 実行にあたってはsudo
が必要です。 プロセスが Docker デーモンユーザーの所有になっているからであり、これを用いないとプロセス名やプロセス ID を確認することができません。$ sudo netstat -tulpn | grep :80
-
-
コンテナーを停止します。
--rm
オプションを指定して起動しているので、コンテナーは自動的に削除されます。docker container stop my_nginx
その他のネットワークチュートリアル
ホストネットワークのチュートリアルを終えたので、以下に示すような別のネットワークチュートリアルも見てください。
networking, host, standalone