Docker Composeの compose-file documentation によると、
depends_on
- サービス間の依存関係を表現する.links
- 他のサービスのコンテナへのリンク、およびdepends_on と同じ方法でサービス間の依存関係の表現 。私は他のコンテナにリンクする目的を理解していないので、2つのオプションの違いはまだ私にとってはかなり難しいようです。
例があればもっと簡単になるでしょうが、見つけられません。
私は、コンテナーBをコンテナーAにリンクすると、コンテナーBはコンテナーAのシェル内で「ping可能」になることに気付きました。
私はコンテナAのbash
の中でping B
を実行し、このような結果を得ました(参考のために、インターネットからの画像)
links
オプションが廃止された後、投稿は更新が必要です。
基本的に、links
はもはや必要ありません。その主な目的は、環境変数を追加することによって別の人がコンテナにアクセスできるようにするためです。network
には暗黙のうちに含まれます。コンテナが同じネットワークに配置されている場合、それらはコンテナ名と他のエイリアスをホストとして使用して互いに到達可能です。
docker run
の場合、--link
も非推奨であり、カスタムネットワークに置き換える必要があります。
docker network create mynet
docker run -d --net mynet --name container1 my_image
docker run -it --net mynet --name container1 another_image
depends_on
は開始順序(そして暗黙のうちに画像を引き出す順序)を表します。これはlinks
の良い副作用でした。
この答えはdocker-compose version 2 に対するもので、 version 3 でも動作します。
depends_onを使用してもデータにアクセスできます。
Docker docs Docker ComposeとDjango を見ると、データベースにアクセスすることができます。
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Linksとdepends_onの違いは何ですか?
リンク:
たとえば、データベース用のコンテナを作成すると、次のようになります。
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
そしてあなたは見つけるかもしれません
"HostPort": "32777"
つまり、データベースをlocalhostポート32777(コンテナー内の3306)から接続できますが、このポートはコンテナーを再起動または削除するたびに変わります。そのため、リンクを使用して、常にデータベースに接続し、それがどのポートであるかを知る必要がないようにすることができます。
web:
links:
- db
depends_on:
Giorgio FerrarisからNiceブログを見つけました Docker-compose.yml:V1からV2へ
Docker-composeがV2ファイルを実行すると、ファイルで定義されているすべてのコンテナ間でネットワークが自動的に構築され、すべてのコンテナはdocker-compose.ymlファイルで定義されている名前を使用して他のコンテナをただちに参照できます。
そして
だから私たちはもうリンクを必要としません。 dbコンテナとWebサーバコンテナ間のネットワーク通信を開始するためにリンクが使用されましたが、これはすでにdocker-composeによって行われています
サービス間の依存関係を表現する。これには2つの効果があります。
簡単な例:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意:depends_onはWebを起動する前にdbとredisが "ready"になるのを待ちません - 起動されるまでのみです。サービスの準備が完了するのを待つ必要がある場合は、この問題およびそれを解決するための戦略の詳細について、起動順序の制御を参照してください。
[2016年9月更新]:この回答はdocker compose file v1を対象としています(以下のサンプルcomposeファイルに示すとおり)。 v2については、@ Windowssooonによる他の回答を参照してください。
[オリジナルの回答]:
それはドキュメンテーションではっきりしています。 depends_on
は依存関係とコンテナ作成の順序を決定し、 links
はこれらだけでなく
リンクされたサービスのコンテナは、エイリアスと同じホスト名、またはエイリアスが指定されていない場合はサービス名で到達可能になります。
たとえば、次のdocker-compose.yml
ファイルを想定します。
web:
image: example/my_web_app:latest
links:
- db
- cache
db:
image: postgres:latest
cache:
image: redis:latest
links
の場合、ポート5432がweb
イメージで公開されていると仮定すると、db
内のコードはdb:5432
を使用してデータベースにアクセスできます。 depends_on
を使用した場合、これは不可能ですが、コンテナーの起動順序は正しいでしょう。