Docker Compose を使用して nginx のロード バランシングを実装する方法

Docker Compose を使用して nginx のロード バランシングを実装する方法

Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装する

すべてのDockerネットワークを表示

docker ネットワーク ls

/*
ネットワーク ID 名前 ドライバー スコープ
b832b168ca9a ブリッジ ブリッジ ローカル
373be82d3a6a composetest_default ブリッジ ローカル
a360425082c4 ホスト ホスト ローカル
154f600f0e90 なし null ローカル

*/

// composetest_default は、前回の記事で Compose を紹介したときに docker-compose.yml ファイルが配置されているディレクトリ名です。
// そのため、docker-composeで作成されたコンテナは、デフォルトでディレクトリ名をネットワーク名としてネットワークを作成し、ドリッジ(ブリッジ)タイプになります。

コンテナのIPアドレスを指定する

公式ウェブサイトのドキュメントアドレス: https://docs.docker.com/compose/compose-file/#ipv4_address-ipv6_address

前回の記事「12. Docker Compose コンテナオーケストレーションツールの使用」から引き続き docker-compose.yml ファイルを書きます。

バージョン: "3"
サービス:
  ウェブ1:
    コンテナ名: web1
    画像: "centos:httpd"
    ポート:
      - 「8080:80」
    特権: true
    ボリューム:
      - "/app/www/web1/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_アドレス: 192.169.0.3
  ウェブ2:
    コンテナ名: web2
    画像: "centos:httpd"
    ポート:
      - 「8081:80」
    特権: true
    ボリューム:
      - "/app/www/web2/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_アドレス: 192.169.0.2
ネットワーク:
  nginx-lsb:
    ドライバー: ブリッジ
    ipam:
      設定:
        - サブネット: 192.169.0.0/16

docker-composeを使用してコンテナを起動します

docker-compose を起動 -d

コンテナが起動しているか、ネットワーク nginx-lsb が作成されているかを確認します。

// 現在の docker-compose.yml で設定されたコンテナグループ内のコンテナステータスを表示できます docker-compose ps

docker ネットワーク ls

/*
ネットワーク ID 名前 ドライバー スコープ
b832b168ca9a ブリッジ ブリッジ ローカル
373be82d3a6a composetest_default ブリッジ ローカル
de6f5b8df1c8 composetest_nginx-lsb ブリッジ ローカル
a360425082c4 ホスト ホスト ローカル
154f600f0e90 なし null ローカル
*/

// コンテナ グループ プロジェクト ファイル名_ネットワーク名の先頭にちなんで名付けられた nginx-lsb ネットワークを作成しました

ネットワーク nginx-lsb の詳細を表示

docker ネットワーク検査 composetest_nginx-lsb

// 詳細では、このネットワークを使用している各コンテナの IP アドレスを確認できます。

のように:

/*
...
 「コンテナ」: {
      "039aa860ef04f20a7566fdc943fb4398a61d2ad6dd3e373b17c86ac778af89e3": {
        "名前": "web2",
        "エンドポイントID": "1bc206661179e65999015f132c2889d3d4365b8d42b8a89cf9c260016fedd5ee",
        "Macアドレス": "02:42:c0:a9:00:02",
        "IPv4アドレス": "192.169.0.2/16",
        "IPv6アドレス": ""
      },
      "437ad7a07da8e46c0abaf845c4b08425338009fbe972bde69478cf47c75c315b": {
        "名前": "web1",
        "エンドポイントID": "5a36e602a5364ee9ad06e9816d09e3966d56ebf06b9394ebc25b8bcee9546607",
        "Macアドレス": "02:42:c0:a9:00:03",
        "IPv4アドレス": "192.169.0.3/16",
        "IPv6アドレス": ""
      }
    },
...
*/

env_file 環境ファイルを使用します:

簡単に言えば、docker-compose.ymlで変数を定義し、外部の.envファイルで参照するということです。

公式ドキュメントのアドレス: https://docs.docker.com/compose/compose-file/#env_file

// または、composetest ディレクトリに .env ファイルを定義して、変数 web1_addr=192.169.0.2 を保存します。
web2_addr=192.169.0.3

// docker-compose.yml ファイルを変更し、変数定義 version: "3" を追加します。
サービス:
  ウェブ1:
    コンテナ名: web1
    画像: "centos:httpd"
    ポート:
      - 「8080:80」
    特権: true
    ボリューム:
      - "/app/www/web1/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_address: ${web1_addr}
  ウェブ2:
    コンテナ名: web2
    画像: "centos:httpd"
    ポート:
      - 「8081:80」
    特権: true
    ボリューム:
      - "/app/www/web2/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_address: ${web2_addr}
ネットワーク:
  nginx-lsb:
    ドライバー: ブリッジ
    ipam:
      設定:
        - サブネット: 192.169.0.0/16

composetestプロジェクトを再起動し、ネットワークの詳細をチェックして、コンテナIPが正常に設定されているかどうかを確認します。

// composetestプロジェクトを再起動する docker-compose up -d

// ネットワークの詳細を表示 docker network examine composetest_nginx-lsb

composetest プロジェクトに nginx サーバーを負荷分散サーバーとして追加します。

// .env ファイルに変数 nginx_lsb を追加します
web1_addr=192.169.0.2
web2_addr=192.169.0.3
nginx_lsb = 192.169.0.100

// docker-compose.yml ファイルを変更し、変数定義 version: "3" を追加します。
サービス:
  nginx-lsb:
    コンテナ名: nginx-lsb
    画像: "centos:nginx"
    ポート: 
      - 「8000:80」
    特権: true
    ボリューム:
      - 「/app/nginx/nginx.conf:/etc/nginx/nginx.conf」
    ネットワーク:
      nginx-lsb:
        ipv4_アドレス: ${nginx_lsb}
  ウェブ1:
    コンテナ名: web1
    画像: "centos:httpd"
    ポート:
      - 「8080:80」
    特権: true
    ボリューム:
      - "/app/www/web1/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_address: ${web1_addr}
  ウェブ2:
    コンテナ名: web2
    画像: "centos:httpd"
    ポート:
      - 「8081:80」
    特権: true
    ボリューム:
      - "/app/www/web2/:/var/www/html/"
    コマンド: ['/usr/sbin/init']
    ネットワーク:
      nginx-lsb:
        ipv4_address: ${web2_addr}
ネットワーク:
  nginx-lsb:
    ドライバー: ブリッジ
    ipam:
      設定:
        - サブネット: 192.169.0.0/16

// composetestプロジェクトを再起動する docker-compose up -d

nginx.conf設定ファイルを変更し、負荷分散を設定する

アップストリーム mydocker {
  サーバー 192.169.0.2;
  サーバー 192.169.0.3;
}

サーバー{
  聞く 80;
  サーバー名 mydocker;
  位置 / {
    proxy_set_header ホスト $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering をオフ;
    proxy_pass http://mydocker;
  }
}

nginx-lsbを再起動して設定ファイルをロードします

docker-composer で nginx-lsb を再起動します

サーバーの負荷分散をテストするには、http://serverIP address:8000 にアクセスしてください。

注: 前回の記事では、異なる Web ファイルが 2 つの httpd サーバーに配置されていました。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ
  • Docker を使用して nginx で tomcat クラスターを構築する方法 (画像とテキスト付き)
  • nginxとdockerを使用してシンプルな負荷分散を実現する詳細な説明
  • Docker ベースの Tomcat クラスタと Nginx ロード バランシングの展開の概要

<<:  Taobao の商品画像切り替え効果を実現する JavaScript

>>:  JavaScript の実行コンテキストとコールスタックの詳細な説明

推薦する

CSS3 でテキスト ストロークを実装する 2 つの方法 (要約)

質問最近、以下に示すように、テキストストローク効果を実現するという要件に遭遇しました。 解決策1まず...

Meituan DBデータをデータウェアハウスに同期するアーキテクチャと実践

背景データ ウェアハウス モデリングでは、何ら処理されていない元のビジネス レイヤー データは OD...

WeChatアプレットでvantフレームワークを使用するための具体的な手順

目次1. アプレットのプロジェクト ディレクトリを開き、ファイルの場所を開きます。 2. プロジェク...

MySQL のフィールドにデフォルトの時間を追加する方法

日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...

vmware16 仮想マシンに共有フォルダを設定する方法

1. 仮想マシンに共有フォルダを設定します。 1. 処理する仮想マシンを選択し、右クリックして設定...

mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明

MySQL では、ユーザーに付与された権限をどのように確認しますか? ユーザーに付与される権限は、グ...

Linux クラウド サーバー上に SFTP サーバーとイメージ サーバーを構築する方法

まず、SFTP プロトコルと FTP プロトコルの違いを理解してください。ここでは詳細には触れません...

VMware vSphere 6.7 (ESXI 6.7) のグラフィック インストール手順

環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...

springcloud alibaba nacos linux 設定の詳細なチュートリアル

まず、github から nacos の圧縮パッケージをダウンロードします: https://git...

MySQLデータベースを別のマシンに移行する方法の詳細な説明

1. まず、移行サーバー上のデータ ファイルを見つけます。MySQL 5.7 とデフォルトのインスト...

Navicat Premier の MySQL へのリモート接続エラー 10038 の解決方法

MySQL へのリモート接続が失敗する場合は、次の理由が考えられます。 1. 若い男性/女性の方は、...

divは、自動入力スタイルをブロックする入力ボックスとして入力を使用せずにコンテンツを入力できます。

今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...

Vueの子コンポーネントが親コンポーネントのメソッドを呼び出す場合の詳細な説明

1. 子コンポーネントのthis.$parent.eventを通じて親コンポーネントメソッドを直接呼...

ローカルサーバーを構築するためのwebpack-dev-serverの実装

目次序文webpack-deb サーバーwebpack-dev-server 起動エラー解決策1解決...

Ubuntu 18.04 (物理マシン) で OpenWRT 開発環境を構成する方法

1. 仮想マシン(物理マシン)をインストールする仮想マシンまたは物理マシンにインストールできます。 ...