重複する小さなリージョンがいくつかありますが、DockerとDebianパッケージングシステムは、本質的に2つの非常に異なる問題を解決します。
Debianパッケージングシステムは、ホストにソフトウェアをインストールし、できるだけ簡単にアップグレードできるように構築されています。「ソフトウェアXバージョンAにはバージョンB以降のソフトウェアYが必要」または「ソフトウェアXバージョンCにはソフトウェアXをインストールしない」など、ソフトウェアコンポーネント間の複雑な依存関係と制約パターンを処理できます。
Dockerシステムは、サービス(特にマイクロサービス)を簡単に記述してデプロイし、おそらく複数のホスト(Docker swarmやKubernetesクラスターなど)に展開するように設計されています。
これら2つの問題は本質的に直交しています。つまり、解決する展開の問題を考えると、ソリューションの一部として、どちらか一方、または両方を使用できます。両方を使用する場合、DebianパッケージはDockerイメージの生成に使用され、Dockerfile(コンテナーで実行される「仮想化システム」を記述するDockerイメージの準備に使用されるレシピ)は、本質的にDebianリポジトリをDebianパッケージングシステムのソースとパッケージをインストールします。
これを念頭に置いて、あなたが本当に探しているのは不変のサーバーパターンを実装することです。クラウドテクノロジーの最近の開発により、ソフトウェアパッケージシステム(Debianパッケージシステムなど)から従来のソフトウェアアップグレードシステムを使用するのではなく、サーバー全体を一度に置き換えるだけでソフトウェアをアップグレードできるようになりました。(この開発の前に、サーバー上に3台のOSがあり、2台がアプライアンスを実行するために交互に使用され、ミニOSがアプライアンスの交換専用に使用されていました。過度に複雑ではありませんが、これは常に残っているようですニッチ。)この手法は、パッケージマネージャーを使用してサーバー上のソフトウェアをアップグレードするのに慣れている場合、サーバーの最終状態はサーバーの「アップグレード履歴」に依存するため、特にエラーが発生する場合、アップグレードプロセス。この不均一性は悪いです、
私たちはこれらの箱をフィールドに何千も持っています。パッケージの依存関係、プロセスの登録などを、debパッケージを介して管理しますが、成功の度合いはさまざまです。
これに関連する可能性があります。不変のサーバーパターンは、「アップグレード履歴」という概念を問題から本質的に破壊することにより、このエラーの原因を一掃します。
不変のサーバーパターンを実装するためのさまざまなオプションがあります。2つの一般的な選択肢は、Dockerイメージ、イメージを使用するか、クラウドプロバイダーの「マスターインスタンスイメージ」を使用することです(AWSではAMIと、Google Compute Engineでは単にカスタムイメージと呼ばれます) 。あなたのユースケースはクラウドベースのテクニックの使用を禁止しているので、Dockerイメージが唯一の適格な選択肢であると仮定します。(完了のために、Dockerの代替として、たとえばVirtual Boxまたは同様の仮想化ソリューションを使用するなど、他のアプローチを使用することは確かに可能です。)
不変のサーバーパターンテクニックを使用する場合、サーバーを表す新しいアーティファクト(Dockerイメージ)を導入し、このアーティファクトもテストできます。サービスの負荷を除いて、実稼働設定を忠実に複製するセットアップを簡単に取得できます。
さて、あなたが説明した具体的な問題を検討するために、Dockerで不変のサーバーパターンを実装することが実際に必要だと仮定しましょう。DockerシステムとDebianパッケージングシステムは相互に排他的ではなく補完的であるため(introを参照)、ソフトウェア用にDebianパッケージを準備する必要がある場合は、引き続き質問に対処する必要があります。
Debianパッケージを使用して(Dockerイメージまたはホストに)ソフトウェアをインストールすることの適切性は、解決しなければならないバージョン管理の問題の複雑さにあります。ソフトウェアの複数のバージョンを同時に実行し、時々ダウングレードする必要があり、慎重に文書化する必要がある複雑なバージョン要件がある場合、Debianパッケージを持っていることは必須です。それ以外の場合、この手順は省略できます。ただし、これらのパッケージを作成して展開するための努力を既に行っているため、作業を中止することに真の価値はありません。したがって、引き続きDebianパッケージを作成することをお勧めします。