web-dev-qa-db-ja.com

ライブラリと依存関係の違いは何ですか?

この docker beginner video の説明では、さまざまなスタックがさまざまなライブラリと依存関係に依存している可能性があり、これはDockerで処理できます。

ただし、ライブラリと依存関係の違いはわかりません。私が見ると、ライブラリはコード/パッケージのコレクションであり、依存関係はデータベース/ウェブサーバー/ツールが依存するライブラリです。

違いはありますか?それとも、「データベースは特定のライブラリと依存関係に依存している」と「データベースは特定のライブラリに依存している」と同じですか?

40
Adam

ライブラリと依存関係はpersonsおよびrelativesのようなものです。一方は単なるエンティティ(何か)で、もう一方はrelationalエンティティです。

私は人です。私の姪も人です。しかし、彼女にとって、私はrelativeです。あなたは本質的に単に親族になることはできません。あなたはいつも親戚です(誰かの)。

同様に、コードライブラリは依存関係のみになります別のプロジェクトがそれを使用する場合、そしてそれは依存関係そのプロジェクトのであり、別のものではありません。コードライブラリは、他のプロジェクトで使用するために特別に開発されたものですが、実際に実現するまでは依存関係ではありません。

99
Kilian Foth

アプリケーションがライブラリを使用する場合、アプリケーションはそのライブラリに対して依存関係を持ちます。

ライブラリは、アプリケーションが持つことができる依存関係の唯一のタイプではありません。ソフトウェアは次のものにも依存します。

  • 構成ファイル
  • デバイスドライバ
  • データベース
  • 等.

したがって、「依存関係vsライブラリー」は「果物vsアップル」のようなものです。リンゴが果物の1つのタイプであるのと同じように、ライブラリーは依存の1つのタイプです。

40
Rik D

依存関係

Dockerイメージでは、さまざまなタイプとバージョンのdependenciesがあります。

  • 基盤となるOS(CentOS、Debian、Windowsなど)
  • データベース(Mongo、Postgresql、ElasticSearchなど)
  • ツール、プログラム(curl、git、awk、wgetなど)
  • サーバー(ngnx、Tomcatなど)
  • プラットフォーム(Java、nodejs、python ...)
  • フレームワーク(Spring、Angular、Play、.Net Core、Django ...)
  • 図書館

ライブラリ

プログラムで使用する機能をすぐに利用できるコンパイル済みコード。プログラマーが手動で定義するか、フレームワーク自体が必要とします。

Dockerのコンテキストでは、ツール、プラットフォームなど、上記のすべてのコンポーネントによって多くのライブラリがインストールされます。

推論

初心者向けDockerチュートリアルビデオでは、ライブラリとOSを依存関係のサブセットとして定義します。ライブラリは、Dockerイメージを構築するために必要な依存関係の一部であり、主に、さまざまな依存関係自体によって管理されます。

「データベースは特定のライブラリと他の依存関係に依存しています」(コメントで言及されている@Rick Dと同様)。

12
RenatoIvancic

ライブラリは、別のプログラムで使用することを目的とした特定のソフトウェアです。通常、ライブラリは特定の問題のグループまたは特定の問題のグループに対処します(ただし、元の問題が何であるか、または何であったかを特定するのが難しいポイントまで成長する場合があります)。ライブラリは、内部またはサードパーティからのものです。通常、ライブラリも実行可能ではありませんが、消費が必要です。

以前の回答が示唆したように、依存関係は2つのコード間の関係です。最初のコードは2番目のコードを呼び出して、アクションを実行するか、情報を返します。ただし、重要な部分は、最初のコードがアクションまたは情報の実装方法を制御できないことです。これは、ライブラリ、フレームワーク、データベースソース、API呼び出し、または個別の関数のいずれかです。単一の関数プログラムがあり、その一部を呼び出される2番目の関数に分割する場合、メイン関数は2番目の関数に依存します。新しい関数は引き続き制御できますが、メイン関数は作業の実装方法を制御できなくなります。

11
Brian Place