1. 概要

DockerエンジンとDockerクライアントの両方にプロキシ設定を提供し、Dockerの使用中にインターネットへの直接アクセスが許可されていない場合にインターネットに接続できるようにします。 企業ネットワークやプライベートクラウドでDockerを使用する場合、通常、プロキシサーバーを介してインターネットに接続する必要があります。 このような場合、プロキシを使用する必要があります。

このチュートリアルでは、Dockerを使用してプロキシを構成するときに発生する可能性のある問題のトラブルシューティング方法を学習します。

2. プロキシとは

プロキシサーバーは、要求元のユーザーとWebサイトの間のトラフィックを制御およびルーティングします。 プロキシは、ユーザーを保護し、ネットワークセキュリティとプライバシーポリシーを維持することを目的としています。 プロキシがない場合、ユーザーは宛先サーバーに直接要求を送信し、応答を受信します。

プロキシを使用する場合、リクエストは最初にプロキシサーバーに送信され、次にプロキシがターゲットサーバーにアクセスします。 次の画像に示すように、プロキシはクライアントとターゲットサーバーの間に配置され、クライアントからのすべての要求が最初にプロキシに送信され、次にプロキシがターゲットサーバーへのアクセスを提供します。

3. Dockerプロキシを構成する

Docker 17.07以降では、プロキシ情報をコンテナーに自動的に渡すようにDockerクライアントを構成できます。 Docker 17.06以前では、環境変数を介してDockerクライアントプロキシ設定を設定できます。

次のJSONの例を〜/ .docker / config.json ファイルに追加して、プロキシ設定を完了しましょう。 ホストのワイルドカードとして*文字を使用し、IPアドレスにCIDR表記を使用することがサポートされています。

{ 
  "proxies":
    { 
      "default": 
        { 
          "httpProxy": "http://<ip-address>:<port>", 
          "httpsProxy": "https://<ip-address>:<port>", 
          "noProxy": "*.<domain>,127.0.0.0/8" 
        } 
    } 
}

変更を保存すると、 config.json ファイルで指定された環境変数を使用して各Dockerコンテナーが作成され、プロキシ設定が有効になります。

4. プロキシサーバーの設定

HTTP_PROXY HTTPS_PROXY FTP_PROXY 、および NO_PROXY 環境変数を使用して、Dockerデーモンのプロキシサービスを構成する必要があります。 これらの変数を詳しく見てみましょう。

  • HTTP_PROXY は、クライアントとWebサーバー間の仲介サーバーとして機能するプロキシの一種です。 HTTPプロキシサーバーの場合、リクエストはWebサイトに送信されません。 プレーンテキストでプロキシに送信されます。 プロキシはこれを分析し、リクエストで提供されたデータを使用してIPアドレスを(オプションで)変更することにより、新しいリクエストをWebサイトに送信します。 Webサイトはそれを受信し、プロキシに応答を送信します。 その後、プロキシは応答を私たちに転送します。
  • HTTPS_PROXY は、HTTPプロキシよりも安全で匿名性があります。 HTTPSプロトコルは、プレーンテキスト形式でデータを転送しません。 SSL層はデータを暗号化して、第三者に見られないようにします。
  • FTP_PROXYアクティブおよびパッシブFTPセッションを管理します。 また、FTPサーバーを保護し、クライアントとサーバー間のFTPプロトコルコマンドを制限します。
  • NO_PROXY 設定は、プロキシを使用してはならないアドレスを指定するために使用されます。

5. プロキシ設定を手動で構成する

Docker 17.07以前では、プロキシ設定を–envフラグで設定する必要があります。

docker run [docker_image] --env FTP_PROXY="ftp://<ip-address>:<port>"
docker run [docker_image] --env HTTP_PROXY="http://<ip-address>:<port>"
docker run [docker_image] --env HTTPS_PROXY="https://<ip-address>:<port>"
docker run [docker_image] --env NO_PROXY="*.<domain>,127.0.0.0/8"

または、それらをDockerfileに追加する必要があります。

ENV FTP_PROXY="ftp://<ip-address>:<port>"
ENV HTTP_PROXY="http://<ip-address>:<port>"
ENV HTTPS_PROXY="https://<ip-address>:<port>"
ENV NO_PROXY="*.<domain>,127.0.0.0/8"

これらの操作により、Dockerプロキシ操作を実行できるようになります。

6. 結論

このチュートリアルでは、プロキシとは何か、およびさまざまなバージョンのDockerでプロキシを設定する方法を学習しました。