docker-compose ネットワーク設定についての簡単な説明

docker-compose ネットワーク設定についての簡単な説明

ネットワーク使用チュートリアル

公式サイト docker-compose.yml リファレンスドキュメント: Compose ファイルバージョン 3 リファレンス

より正確な中国語翻訳: Compose ファイル バージョン 3 リファレンス

ネットワークは通常、クラスター サービスに使用され、異なるアプリケーションを同じネットワーク内で実行できるため、ネットワーク分離の問題が解決されます。このアプリケーションは、スウォーム展開では非常に一般的です。ただし、この記事ではこれについては説明しません。

一般的に、クラスター サービスの場合、アプリケーション サービスを迅速にオーケストレーションおよびデプロイするために、docker-compose.yml ドキュメントがよく使用されます。公式サイトでは、次のような使用シナリオと方法が紹介されています。

1. 明示的なネットワーク宣言のない docker-compose.yml

たとえば、次の内容を含む docker-compose.yml をappディレクトリに作成します。

バージョン: '3'
サービス:
 ウェブ:
  イメージ: nginx:最新
  コンテナ名: ウェブ
  依存:
   -db
  ポート:
   - 「9090:80」
  リンク:
   -db
 デシベル:
  画像: mysql
  コンテナ名: db1234567891011121314

docker-compose upを使用してコンテナを起動すると、これらのコンテナはapp_defaultネットワークに追加されます。 docker network lsを使用してネットワーク リストを表示し、 docker network inspect <container id>対応するネットワークの構成を表示します。

$ dockerネットワークls
ネットワーク ID 名前 ドライバー スコープ
6f5d9bc0b0a0 app_default ブリッジ ローカル
0fb4027b4f6d ブリッジ ブリッジ ローカル
567f333b9de8 docker-compose_default ブリッジ ローカル
bb346324162a ホスト ホスト ローカル
a4de711f6915 mysql_app ブリッジ ローカル
f6c79184ed27 mysql_default ブリッジ ローカル
6358d9d60e8a なし null ローカル
12345678910

2. networksキーワードはカスタムネットワークを指定する

たとえば、次の docker-compose.yml ファイルは、フロント ネットワークとバック ネットワークを定義し、ネットワーク分離を実装します。プロキシと DB はアプリ経由でのみ通信できます。このうち、 custom-driver-1そのままでは使えません。 host, bridge, overlayなどのオプションのいずれかに置き換える必要があります。

バージョン: '3'

サービス:
 プロキシ:
  ビルド: ./proxy
  ネットワーク:
   - フロント
 アプリ:
  ビルド: ./app
  ネットワーク:
   - フロント
   - 戻る
 デシベル:
  画像: postgres
  ネットワーク:
   - 戻る

ネットワーク:
 フロント:
  # カスタムドライバーを使用する
  ドライバー: カスタムドライバー 1
 戻る:
  # 特別なオプションを取るカスタムドライバーを使用する
  ドライバー: カスタムドライバー2
  ドライバーオプション:
   : "1"
   バー: "2"123456789101112131415161718192021222324252627

ここで、back と front という 2 つのネットワークが定義されていることに注目してください。それらの名前は back と font として定義されているようですが、 docker network lsコマンドを使用しても見つけることができません。 myAppディレクトリでdocker-compose upコマンドを実行すると、2 つのネットワークはそれぞれmyApp_backmyApp_frontに対応するはずです。

3. デフォルトネットワークを構成する

バージョン: '2'

サービス:
 ウェブ:
  建てる: 。
  ポート:
   - 「8000:8000」
 デシベル:
  画像: postgres

ネットワーク:
 デフォルト:
  # カスタムドライバーを使用する
  ドライバー: custom-driver-11234567891011121314

4. 既存のネットワークを使用する

ネットワーク:
 デフォルト:
  外部の:
   名前: my-pre-existing-network1234

発生した問題

上記を学んだ後、著者は自分のプロジェクトを実践する準備が整いました。私のプロジェクトには 2 つの docker-compose.yml ファイルが含まれており、 linksオプションを使用しているため、ネットワーク構成を使用する必要があります。

その中で、docker-compose.yml は、 mysql/ディレクトリにある mysql サービスを起動するために使用されます。

 バージョン: "3"
サービス:
 データベースマスター:
  イメージ: master/mysql:最新
  コンテナ名: dbmaster
  ポート:
   - 「3308:3306」
  ボリューム:
   - $HOME/Work/data/dbmaster:/var/lib/mysql
  環境:
   MYSQL_ROOT_PASSWORD: マスター
  ログ記録:
   ドライバー: "json-file"
   オプション:
    最大サイズ: "1000k"
    最大ファイル数: "20"
  ネットワーク:
   - アプリ

 dbスレーブ:
  イメージ: スレーブ/mysql:最新
  コンテナ名: dbslave
  ポート:
   - 「3309:3306」
  依存:
   -dbマスター
  ボリューム:
   - $HOME/Work/data/dbslave:/var/lib/mysql
  環境:
   MYSQL_ROOT_PASSWORD: スレーブ
  ログ記録:
   ドライバー: "json-file"
   オプション:
    最大サイズ: "1000k"
    最大ファイル数: "20"
  リンク:
   -dbマスター
  ネットワーク:
   - アプリ
ネットワーク:
  デフォルト:
  外部の:
   名前: app12345678910111213141516171819202122232425262728293031323334353637383940414243

別の docker-compose.yml は、 cloudgo/ディレクトリにあるサービス プログラムを起動するために使用されます。

バージョン: "3"
サービス:
 ウェブ:
  画像: nginx:最新
  コンテナ名: ウェブ
  依存:
   -クラウドゴー
  ポート:
   - 「9090:80」
  ボリューム:
   - $HOME/Work/docker/docker-compose/nginx/conf.d:/etc/nginx/conf.d
  リンク:
   -クラウドゴット
  ログ記録:
   ドライバー: "json-file"
   オプション:
    最大サイズ: "1000k"
    最大ファイル数: "20"
  ネットワーク:
   - アプリ

 クラウドゴー:
  画像: cloudgo:最新
  コンテナ名: cloudgo
  ポート:
   - 「8080:8080」
  ログ記録:
   ドライバー: "json-file"
   オプション:
    最大サイズ: "1000k"
    最大ファイル数: "20" 
  外部リンク:
   -dbマスター
   -dbスレーブ
  ネットワーク:
   - アプリ
ネットワーク:
 アプリ:
  外部: true123456789101112131415161718192021222324252627282930313233343536373839

事前に作成されたネットワークを使用し、それらをこの既に作成されたネットワークに参加させて通信を可能にすることにしました。これを実行するには、次のコマンドを実行しました。

$ dockerネットワークapp1を作成します

その後、準備した docker-compose.yml ファイルの実行を開始します。まず設定ファイルを実行して mysql を起動すると、結果は次のようになります。

$ docker-compose を起動します
エラー: サービス「dbmaster」は未定義のネットワーク「app」12 を使用しています

作成されましたが、ネットワークが未定義であるというエラーが報告されます。名前を mysql_app に変更してみましたが、同じエラー メッセージが表示されます。最終的に、このアプローチは実行不可能であることが証明され、現在まで公式文書には例は見つかりませんでした。

したがって、最終的に、最初の docker-compose.yml ファイルのネットワーク構成を次のように変更することが決定されました。

ネットワーク:
  mysql_app:
   ドライバー: bridge123

後で使用するために、このファイルでネットワークを定義します。ここで変更は完了です。ネットワークが参照されるファイル内の他の場所でも同じ変更を行う必要があります。同様に、2 番目のファイルについても同様です。

その他の用途

リンクの代わりにエイリアスを使用する

一般的な使用形式は次のとおりです。

サービス:
 いくつかのサービス:
  ネットワーク:
   何らかのネットワーク:
    エイリアス:
     -エイリアス1
     -エイリアス3
   その他のネットワーク:
    エイリアス:
     -エイリアス212345678910

次の例では、 webコンテナーはdatabase:3306またはdb:3306を介してdbコンテナーに直接アクセスできます。これらは同じネットワークに属しており、 dbにはホストエイリアスが設定されているため、このアクセス方法は完全に可能です。

バージョン: '2'

サービス:
 ウェブ:
  依存:
   - 労働者
  ネットワーク:
   - 新しい

 ワーカー:
  依存:
   -db
  ネットワーク:
   - 遺産

 デシベル:
  画像: mysql
  ネットワーク:
   新しい:
    エイリアス:
     - データベース
   遺産:
    エイリアス:
     -MySQLについて
ネットワーク:
 新しい:
 レガシー:123456789101112131415161718192021222324252627

現時点では、depends_on を直接使用する場合、リンクは不要になりました。ワーカーが DB にアクセスする必要がある場合は、mysql:port を直接使用できます。

ネットワークを使用する際の重要なポイントは次のとおりです。
1. ネットワークのカスタマイズ方法に注意する
2. docker-compose.ymlファイルの場所とネットワークのデフォルトの命名との関係に注意してください。
3. 問題を解決するために複数の代替手段を試すことに注意を払う

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

以下もご興味があるかもしれません:
  • Docker Compose ネットワーク設定の説明
  • Dockerはブリッジを追加し、IPアドレスの範囲を設定します
  • Dockerカスタムブリッジdocker0とdockerのコマンド操作の開始、終了、再起動
  • Centos Docker ブリッジ モードでホスト Redis サービスにアクセスできないというトラブルシューティングの経験
  • Docker-compose はブリッジを作成し、サブネットを追加し、ネットワーク カードを削除します。

<<:  トランジションコンポーネントのアニメーション効果を使用した Vue サンプルコード

>>:  MySQL5.6.31 winx64.zip インストールと設定のチュートリアル

推薦する

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

Nginx のインストールと設定ルールの詳細な紹介

目次1. nginxのインストールと操作(Mac OS環境) 2. nginxルールの設定3. コマ...

JavaScript の Set データ構造の詳細な説明

目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...

forEachでawaitが機能しない問題を解決する

1. はじめに数日前、プロジェクトでトラバーサルに使用したときに落とし穴に遭遇し、解決するのに 1 ...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

Nginx Webサーバーのサンプルコードの設定方法の詳細な説明

概要今日は主に、NGINX を Web サーバーとして設定する方法を共有します。内容は次のとおりです...

OR キーワードを使用した MySql 複数条件クエリ ステートメント

前の記事では、And キーワードを使用した MySql の複数条件クエリ ステートメントを紹介しまし...

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法

MySQLは1つのテーブルからデータをクエリし、それを別のテーブルに挿入する実装方法ウェブサイト開発...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

CentOS7 環境で gcc (バージョン 10.2.0) をアップグレードする詳細な手順

目次簡単な紹介1. 現在のgccバージョンを確認する2. gccインストールパッケージ(バージョン1...

MySQLの高可用性と高パフォーマンスのクラスタを構築する方法

目次MySQL NDB Clusterとはクラスター構築のための準備作業クラスターのデプロイを開始す...

MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明

目次ストアドプロシージャの概要ストアド プロシージャを使用する理由は何ですか?ストアドプロシージャの...

Linuxでポートが開いているかどうかを確認する方法のまとめ

方法1: lsofコマンドを使用するlsof コマンドを使用して、ポートが開いているかどうかを確認で...

乱数、文字列、日付、検証コード、UUIDを生成するMySQLメソッド

目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...