ドッカー構成についての私の理解は次のとおりです。
- サービスを「スケーリング」して、一度に複数のコンテナーで実行できます。
- サービス A をサービス B にリンクすると、サービス A はサービス B を実行しているコンテナーにアクセスできます。
私の理解は正しいですか?もしそうなら、サービスを実行している複数のコンテナがある場合、リンクはどこに接続しますか?
ドッカー構成についての私の理解は次のとおりです。
私の理解は正しいですか?もしそうなら、サービスを実行している複数のコンテナがある場合、リンクはどこに接続しますか?
まず最初に、デフォルトでは、コンテナを他のコンテナとリンクするかどうかに関係なく、すべてのコンテナが同じホストで実行されている他のコンテナを表示できることを明確にします (コンテナ IP を使用)。icc=true
docker デーモンのフラグを使用して、この動作を変更できます。
docker-compose を使用したリンクに関しては、これらはリンクを含むコンテナーが作成されたときに生成されます。例で見てみましょう。この docker-compose.yml の使用
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
コンテナを実行docker-compose up -d
した後、次のようweb_1
にコンテナにリンクされredis_1
ます。
(...)
"Links": [
"/compose_redis_1:/compose_web_1/compose_redis_1",
"/compose_redis_1:/compose_web_1/redis",
"/compose_redis_1:/compose_web_1/redis_1"
], (...)
redis
次に、を使用してサービスをスケーリングしますdocker-compose scale redis=2
。それを実行した後(そして新しいコンテナを作成した後redis_2
)、リンクは変更されweb_1
ません。
(...)
"Links": [
"/compose_redis_1:/compose_web_1/compose_redis_1",
"/compose_redis_1:/compose_web_1/redis",
"/compose_redis_1:/compose_web_1/redis_1"
], (...)
web_1
これらのリンクが作成されたことを確認するには、停止、削除、および実行する必要があります。
docker-compose stop web
docker-compose rm web
docker-compose run -d web
docker inspect compose_web_run_2
(...) "Links": [
"/compose_redis_1:/compose_web_run_2/compose_redis_1",
"/compose_redis_2:/compose_web_run_2/compose_redis_2",
"/compose_redis_1:/compose_web_run_2/redis",
"/compose_redis_1:/compose_web_run_2/redis_1",
"/compose_redis_2:/compose_web_run_2/redis_2"
],(...)
そしてコンテナ/etc/hosts
の:web_1
172.17.0.24 7be2dabea910
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.21 compose_redis_1 8a1297a5b3e4
172.17.0.23 compose_redis_2 069dd46836aa
172.17.0.21 redis 8a1297a5b3e4 compose_redis_1
172.17.0.21 redis_1 8a1297a5b3e4 compose_redis_1
172.17.0.23 redis_2 069dd46836aa compose_redis_2
したがって、新しいリンクを生成するには、コンテナを停止して削除し、再度実行する必要があります。