私はdockerを学んでいます。これらの2つの用語は私を混乱させます。たとえば、2つのサービスredis
およびweb-app
を定義したdocker-composeは次のとおりです。
services:
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
links:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge
このdocker-compose
ファイルは、lognetという名前のブリッジネットワークを定義し、すべてのサービスがこのネットワークに接続します。私が理解しているように、このアクションにより、これらのサービスは他のサービスを見ることができます。そのため、上記の場合にアプリサービスがredisサービスにリンクする必要があるのはなぜですか。
ありがとう
リンクはネットワークに置き換えられました。 Dockerは、これらを 使用を避ける必要があるレガシー機能 として説明します。リンクを安全に削除でき、2つのコンテナはサービス名(またはcontainer_name)で相互に参照できます。
構成では、リンクには暗黙的な依存関係が作成されるという副作用があります。これをより明示的な depends_on セクションに置き換えて、redisが起動する前または起動する前にアプリが実行されないようにする必要があります。
余談ですが、これがホスト上にその名前で存在する唯一のコンテナであり、docker cliから名前で参照する必要があることが確実でない限り、私はcontainer_nameをハードコーディングするのは好きではありません。コンテナー名がない場合、docker-composeは直感的ではない名前を付けますが、ネットワーク上のredisのエイリアスも付けます。これは、コンテナーからコンテナーへのネットワークに必要なものです。したがって、これらの提案の最終結果は次のとおりです。
version: '2'
# do not forget the version line, this file syntax is invalid without it
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
depends_on:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge