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 インストールと設定のチュートリアル

推薦する

Centos7.6にTomcat-8.5.39をインストールする方法

Centos7.6 に Tomcat-8.5.39 をインストールする方法は次のとおりです。詳細は次...

Vueでクラススタイルを使用する方法の詳細

目次1. ブール2. 表現3. マルチクラスパッケージ4. v-bind でクラス class を直...

CSS 3.0とビデオを組み合わせることでクリエイティブなオープニング効果を実現

CSS 3.0 とビデオを組み合わせて実現したクリエイティブなオープニングをご紹介します。効果は次の...

HTMLテキスト内のすべてのタグを置き換える方法

(?i) は大文字と小文字を区別しないことを意味します。大文字と小文字をすべて置き換えます。 htm...

reduxの動作原理と使い方の説明

目次1. redux とは何ですか? 2. 還元の原則3. redux の使い方は? (1)redu...

Docker Consul コンテナ サービスの更新と見つかった問題の概要

目次1. コンテナサービスの更新とDockerコンサルの検出1. サービス登録と検出とは何ですか? ...

Mac+IDEA+Tomcat の設定手順

目次1. ダウンロード2. インストールと解凍3. Tomcatを起動する4番目に、インストールが成...

Bash の山括弧の深い理解 (初心者向け)

序文Bash には、ls、cd、mv などの重要な組み込みコマンドが多数あるほか、grep、awk、...

ページにデータを表示するReactメソッド

目次親コンポーネントリストボックスリストコンポーネントボタンコンポーネント PageButton昨年...

Linux の PHP に XML 拡張機能をインストールする詳細な手順

PHP Linux に XML 拡張機能をインストールする1. PHPインストールソースパッケージを...

MySQL における TIMESTAMPDIFF ケースの詳細な説明

1.構文TIMESTAMPDIFF(unit,begin,end); 単位に従って時間差を返します。...

MySQLのinnodb_data_file_pathパラメータを変更する際の注意事項

序文innodb_data_file_path は、innodb テーブルスペース ファイルを指定す...

JavaScript ファクトリーパターンの説明

目次シンプルファクトリーファクトリーメソッド安全な工場方法アブストラクトファクトリー要約するシンプル...

Linux でハードディスクのサイズを確認し、ハードディスクをマウントする方法

Linux には、マウントされたハードディスクとマウントされていないハードディスクの 2 種類のハー...

負荷分散と動的・静的分離を実現するNginx+Tomcatの原理の分析

1. Nginx ロードバランシングの実装原理1. Nginxはリバースプロキシを通じて負荷分散を実...