概要概要
デフォルトでは、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 up
whenを実行すると、次の手順が実行されます。
- myapp_defaultというネットワークを作成します
- Webサービスを使用してコンテナーを作成する構成。ネットワークに参加するためのWeb名myapp_default
- コンテナ、作成するために、DBサービスの設定を使用したネットワークmyapp_defaultに参加すると名前のDBを
コンテナは、サービス名(webまたはdb)をホスト名として使用して相互にアクセスできます。たとえば、postgres://db:5432
dbコンテナへのアクセスに使用できる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