Docker コンテナでネットワーク リクエストが遅くなる問題の解決策

Docker コンテナでネットワーク リクエストが遅くなる問題の解決策

Docker の使用中に、いくつかの問題が発見されました。npm install や bundle install 操作など、Docker のネットワーク リクエストは頻繁に失敗しました。または、中間層として、アプリケーションで API データを取得するプロセスでタイムアウトが発生することがよくありました。そのため、ネットワーク リクエストが遅い問題を解決するために、Docker のネットワーク メカニズムを調査し始めました。

1. Dockerネットワークモード

1. なし

none として設定すると、Docker コンテナ ネットワークは入力も出力もできず、外部から分離されます。

2. ブリッジ
デフォルトのモードはブリッジです。Docker には独自の仮想ネットワーク カードがあり、ブリッジを通じてホストからネットワークを取得します。

3. ホスト
ホストとして指定すると、ホストのネットワーク カードがコンテナーに直接公開され、コンテナーはホストのネットワークを介してインターネットに直接アクセスできます。たとえば、ホスト上の redis サービス 127.0.0.1:6357 を取得する場合は、この方法を使用する必要がありますが、安全性は低くなります。

4. コンテナ
他のコンテナのネットワークを使用する

2. Docker DNS解決

Docker コンテナは基本的に Linux なので、DNS 解決方法は Linux と同じで、/etc/hosts ファイルを見つけることが優先されます。このファイルには localhost などのドメイン名が記述されており、例えば次のようになります。

127.0.0.1 ローカルホスト

Docker コンテナが他のコンテナにリンクする場合、リンクされたドメイン名が追加されます。例:

docker run --name app --link app-redis:redis -d ubuntu

ホストにはさらに追加される

172.17.0.3 アプリ Redis 038c8388e4a1

/etc/hosts ファイルを見つけたら、次に /etc/resolv.conf ファイルを見つけます。

ドメインローカル
ネームサーバー 192.168.65.1
ネームサーバー 192.168.65.10

3. Dockerコンテナ内のネットワークリクエストが遅い問題を解決する

パケットキャプチャなどの分析の結果、ネットワーク要求の遅延は主に DNS 解決で発生していることが判明したため、主に DNS 最適化が採用されました。

リクエストが独自のイントラネット API に対するものである場合は、/etc/hosts ファイルを直接変更できます。リクエストが外部ネットワークに対するものである場合は、/etc/resolv.conf でネームサーバーを変更できます。

Docker コンテナはファイルを変更することによって直接実装されるわけではありませんが、run コマンドを通じて実装できます。

# ホストを追加
docker run --name app --add-host='api.embbnux.com:10.98.10.98' -d ubuntu
# DNSサーバーを指定する
docker run --name app --dns=223.5.5.5 --dns=8.8.8.8 -d ubuntu

このようにして、Docker コンテナ内の DNS 解決時間が短縮されます。

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

以下もご興味があるかもしれません:
  • DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Dockerコンテナ内の独立IPにアクセスする方法
  • docker でプライベート サーバーを構築する方法 (CentOS 上の nginx と ssl を使用した docker-registry)
  • Docker ベースの lanproxy イントラネット侵入サービスの構築の詳細説明
  • Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順
  • Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)
  • Dockerイントラネット侵入FRP展開の実装プロセスの分析

<<:  CentOS 6.4 MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル

>>:  Reactは適応性の高い仮想リストを実装する

推薦する

Tomcat で複数の war パッケージを展開する方法と手順

1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...

この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

イベント委任を使用してメッセージ ボード機能を実装します。 <!DOCTYPE html>...

WeChat公式アカウントでReactプロジェクトを実行する方法

目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...

MySQL データベースの大文字と小文字の区別の問題

MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...

Linux に mysql をインストールするときに /etc に my.cnf ファイルがない問題を解決する

今日、mysql ポートを変更したいと思ったのですが、/etc/ ディレクトリに my.cnf ファ...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

初心者向けのMySQLデータベースとテーブルDDLの作成と操作の学習

目次1. データベースを操作する1.1 データベースを作成する1.2 データベースをクエリする1.3...

CSS3マスクレイヤーのくり抜き効果を実現するさまざまな方法

この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...

Linux trコマンドの使用

1. はじめにtr はテキストの一部を変換または削除するために使用されます。 tr は transl...

zabbix を使用して ogg プロセスを監視する (Linux プラットフォーム)

以前作成されたデータベースの ogg プロセスは、発見されるまでの約半月間ダウンしていました。起動で...

mysql トリガーの作成と使用例

目次トリガーとは何かトリガーを作成するMySQL 作成構文のキーワードの説明: 1. MySQL ト...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

MySQL 8.0.25 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...

VueはTodoListの例をカプセル化し、ブラウザのローカルキャッシュのアプリケーションを実装します。

この記事では主に、Vue で TodoList をカプセル化するケースと、ブラウザのローカル キャッ...

忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...