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は適応性の高い仮想リストを実装する

推薦する

Vue-routerルーティングの使い方

目次1. 説明2. インストール3. テスト1. 説明Vue Router は、Vue.js の公式...

Pagoda Panel のインストール時にサーバーがデータベースにリモート接続できない問題の解決策

自分のウェブサイトを構築する予定なので、618 プロモーションを利用して Tencent Cloud...

Linuxはlsof/extundeleteツールを使用して、誤って削除されたファイルやディレクトリを復元します。

序文Linux には Windows のような目立つごみ箱がないため、簡単に復元することはできません...

MySQL 5.6 ルートパスワード変更チュートリアル

1. MySQL 5.6をインストールした後、正常に有効化できないMySQL の圧縮バージョンは、解...

ウェブページの読みやすさを向上させるいくつかの方法

1. 対照的な色を使用します。ここでのコントラストとは、テキストの色と背景色のコントラストを指します...

高速レイアウトのための CSS ビューポート単位

CSS ビューポート ユニットはここ数年登場しており、時が経つにつれて、ますます多くの開発者が使用し...

MySQL 8.0.20 Window10無料インストール版設定とNavicat管理チュートリアルグラフィック詳細説明

1. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...

MacOS に MySQL 8.0 をインストールして MySQL にログインする方法

公式チュートリアルに従って、インストール パッケージをダウンロードし、[インストール] をクリックし...

MySQL ステートメントの配置と概要の紹介

SQL (Structured Query Language) ステートメント、つまり構造化クエリ言...

CSS 向け SASS スタイル プログラミング ガイド

SASS を使用する開発者が増えるにつれて、SASS コードの数に注意する必要があります。 SASS...

uni-appがNFC読み取り機能を実装

この記事では、参考までに、NFC読み取り機能を実装するためのuni-appの具体的なコードを紹介しま...

ウェブサイトのカラースキーム ウェブサイトに適した色の選択

色はウェブサイト訪問者に影響を与えますか?数年前までは、ウェブサイトはまだ贅沢品でしたが、今ではほと...

html リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

Vue のフィルターウィジェットの詳細な使用方法

この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...

Docker の詳細なイラスト

1. Dockerの紹介1.1 仮想化1.1.1 仮想化とは何ですか?コンピュータにおける仮想化とは...