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

推薦する

MacでMysqlのルートパスワードを忘れた場合の解決方法

長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...

Ubuntu 18.04 のsources.listをAlibabaまたはTsinghuaミラーに変更する方法

1. バックアップソースリストUbuntu のデフォルトのソースは国内サーバーではないため、更新され...

Ubuntuで余分なカーネルを削除する方法

ステップ1: 現在のカーネルを表示する 読み取る $ uname -a Linux rew 4.15...

Gitlab実践チュートリアルでは、関連する設定操作にgit configを使用します。

この記事では、実際に発生した問題をもとに、git の設定に関する内容を紹介します。コマンド: git...

ソケット '/tmp/mysql.sock' 経由でローカル MySQL に接続できない解決策

エラーメッセージ:エラー 2002: ソケット '/tmp/mysql.sock' ...

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

CSSカウンター関連属性の学習の詳細な説明

CSS カウンター属性はほぼすべてのブラウザ (IE8 を含む) でサポートされていますが、あまり使...

CSSを使用して3Dフォトウォール効果を作成する

CSS を使用して 3D フォト ウォールを作成します。具体的なコードは次のとおりです。 <!...

vue+el-upload は複数ファイルの動的アップロードを実現します

vue+el-upload 複数ファイルの動的アップロード、参考までに具体的な内容は以下のとおりです...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

CSSで検索ボックスを非表示にする機能を実装します(アニメーション順方向と逆方向のシーケンス)

上部のメニュー バーに検索ボックスを配置するのは一般的なシナリオですが、検索機能がそれほど頻繁に使用...

Vue3 (V) HTTPライブラリaxiosの統合の詳細

目次1. axiosをインストールする2. アクシオスの使用1.ホームページでaxiosを参照する2...

Docker構成 Alibaba Cloud Container Serviceの操作

Alibaba Cloud Dockerコンテナサービスの設定Alibaba Cloud Image...

画像の一時停止を実現するjQueryプラグイン

この記事では、画像の一時停止を実現するためのjQueryプラグインの具体的なコードを参考までに共有し...

js キャンバスは検証コードを実装し、検証コード機能を取得します

この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...