ホストネットワークのチュートリアル

このチュートリアルでは、スタンドアロンコンテナーのネットワークを取り扱います。 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 ではサポートされていません。

手順

  1. コンテナーを生成し、デタッチモードで起動します。 --rmオプションは、コンテナーが終了または停止したときにコンテナーを削除するものです。 -dフラグは、コンテナーをデタッチモード(バックグラウンド)で起動します。

    $ docker run --rm -d --network host --name my_nginx nginx
    
  2. ブラウザーから http://localhost:80/ を入力して Nginx にアクセスします。

  3. 以下のコマンドを実行して、ネットワークの状況を確認します。

    • ネットワークインターフェースをすべて確認します。 そして新しいインターフェースは生成されていないことを確認します。

      $ ip addr show
      
    • netstatコマンドを使って、どのプロセスがポート 80 に割り当てられているかを確認します。 実行にあたってはsudoが必要です。 プロセスが Docker デーモンユーザーの所有になっているからであり、これを用いないとプロセス名やプロセス ID を確認することができません。

      $ sudo netstat -tulpn | grep :80
      
  4. コンテナーを停止します。 --rmオプションを指定して起動しているので、コンテナーは自動的に削除されます。

    docker container stop my_nginx
    

その他のネットワークチュートリアル

ホストネットワークのチュートリアルを終えたので、以下に示すような別のネットワークチュートリアルも見てください。

networking, host, standalone