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 の実行コンテキストとコールスタックの詳細な説明

推薦する

アーティストの自己啓発におけるいくつかの経験

会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...

Linux システムでログを手動でスクロールする方法

ログローテーションは、Linux システムでは非常に一般的な機能です。ログローテーションは、システム...

MySql ビュー トリガー ストアド プロシージャの詳細な説明

ビュー:一時テーブルを繰り返し使用する場合、将来の使用を容易にするために別名を付けることができます。...

さまざまなMySQLインデックスの使用方法の詳細な説明

1. 遅いクエリログ1.1 MySQL ログの種類ログは、データベースの操作や、ユーザーがデータベー...

MySQL SHOW PROCESSLISTはトラブルシューティングの全プロセスを支援します

1. SHOW PROCESSLISTコマンドSHOW PROCESSLIST は実行中のスレッド ...

Vue ページ スタック マネージャーの詳細

目次2. 試した方法2.1 キープアライブ2.2 ネストされたルートを持つ CSS 3. 機能説明4...

Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間...

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

VMware Workstation 14 Pro は CentOS 7.0 をインストールします

VMware Workstation 14 ProにCentOS 7.0をインストールする具体的な方...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

中国における中国語ドメイン名の人気は新たなクライマックスを迎えた

<br />外交部などの中央政府機関、各レベルの地方政府、その他の国家機関や部門が率先し...

Tomcat が https アクセスをサポートするための手順の説明

tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...

HTML テーブルの使い方 (Web ページの視覚効果を表示する)

NetEase Blog で HTML を使用する場合、テンプレートに直接コードを追加できることは...

純粋なテキストとアイコン付きのボタンを実現するための HTML+CSS

この記事では、いくつかの基本的なページ要素の実装方法をまとめており、後で更新される予定です。まず、私...

React サーバーサイドレンダリング原則の分析と実践

ほとんどの人は、サーバーサイド レンダリング (SSR と呼んでいます) の概念について聞いたことが...