38. DockerComposeカスタムネットワーク

概要概要

デフォルトでは、Composeはアプリケーションのネットワークを作成し、サービスの各コンテナーがネットワークに参加します。このようにして、ネットワーク内の他のコンテナからコンテナにアクセスできます。それだけでなく、サービス名をホスト名として使用して、他のコンテナからコンテナにアクセスすることもできます

デフォルトでは、作成プロジェクト名に基づくアプリケーションのネットワークdocker-compose.yml名と、ディレクトリ名に基づくプロジェクト名プロジェクトの名前を変更するには、を使用--project-nameしてCOMPOSE_PORJECT_NAME変数または環境変数を識別できます。

myapp applicationという名前のディレクトリの場合、docker-compose.yml次のようになります。

version: '2'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

docker-compose upwhenを実行すると、次の手順が実行されます。

  • myapp_defaultというネットワークを作成します
  • Webサービスを使用してコンテナーを作成する構成。ネットワークに参加するためのWeb名myapp_default
  • コンテナ、作成するために、DBサービスの設定を使用したネットワークmyapp_defaultに参加する名前のDBを

コンテナは、サービス名(webまたはdb)をホスト名として使用して相互にアクセスできます。たとえば、postgres://db:5432dbコンテナへのアクセスに使用できるWebサービス

サービスの変更を構成するときは、docker-compose upコマンドを使用して構成を更新します。この時点で、Composeは古いコンテナを削除し、新しいコンテナを作成します。新しいコンテナは異なるIPアドレスでネットワークに参加し、名前は同じままになります。古いコンテナへの接続はすべて閉じられ、コンテナは新しいコンテナを見つけて再度接続します。

リンクを使用する

デフォルトでは、サービスはサービス名を使用して相互にアクセスできます。リンクを使用すると、エイリアスを定義して、他のサービスにアクセスするために使用できます。

version: '2'
services:
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres

カスタムネットワーク

シナリオによっては、デフォルトのネットワーク構成ではニーズを満たせない場合があります。現時点では、networksコマンドを使用してネットワークをカスタマイズできます。Networksコマンドを使用すると、より複雑なネットワークトポロジを作成し、カスタムネットワークドライバーとオプションを指定できます。それだけでなく、ネットワークを使用して、Composeによって管理されていない外部で作成されたネットワークにサービスを接続することもできます。

version: '2'

services:
  proxy:
    build: ./proxy
    networks:
      - front
  app:
    build: ./app
    networks:
      - front
      - back
  db:
    image: postgres
    networks:
      - back

networks:
  front:
    # Use a custom driver
    driver: custom-driver-1
  back:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

その中で、プロキシサービスはdbサービスから分離されており、どちらも独自のネットワークを使用しています。アプリサービスは2つと通信できます。networkコマンドを使用して、ネットワークの分離とサービス間の接続を容易にします。

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

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

このようにして、アプリケーションのカスタムネットワークドライバーを指定できます

既存のネットワーク

事前にmyappというネットワークを作成し、この新しく作成したネットワークにComposeを参加させて、すべてのComposeが通信できるようにします。このとき、外部オプションを使用します。

# 创建网络
docker network create <Network Name>

# 查看已存在的网络
docker network list
networks:
  default:
    external:
      name: myapp

おすすめ

転載: blog.csdn.net/shujuelin/article/details/108403525