mattn:スーパーレターありがとうございます。
利用者がそのアプリケーションをどの様に利用したいか次第だと思います。
通常アプリケーションを配布する場合にはインストールという作業が伴います。アプリケーションをダウンロードしたユーザは、手順書の通りにインストールするか、インストーラを利用して動作環境にアプリケーションを組み込む必要があります。
インストールできた後、場合によっては設定が必要かもしれません。それらの準備が整ったあとようやうアプリケーションの起動が出来るようになります。しかしこれはあくまでそのアプリケーション専用の手順です。別のアプリケーションはまた異なる手順かもしれません。
さらに例えば先にインストールしたアプリケーションとは別のアプリケーションを使って、それらを連携させたい場合はどうでしょうか。割と大変な作業が想定できます。
1つ1つは大した事ない手順かもしれませんが、数が多くなるとそれだけ手間も掛かります。そしてインストールしようとしている環境とアプリケーションが期待している動作環境が異なる為に正しく動作しない場合もあります。
これらのインストール手順を自動化し OS レベルで動作保証をし、個々のアプリケーションを連携できる様にする仕組みがコンテナです。コンテナを利用する事で、例えば
php と nginx と postgresql を連携させ、その上で自分が開発した php
のアプリケーションを実行する環境をユーザに配布する事ができる様になります。
これはコンテナを使わない今までの単純なアプリケーション配布方式では実現できなかった効果です。
当然ですがコンテナを使わず動作させる方が良い場合もあります。高速に動作しますし、動作させている OS との連携や相性も幾分は良いはずです。ただし OS や
CPU アーキテクチャに合わせたバイナリを自分で選択してインストール必要があります。
これは利用者がどの様にそのアプリケーションを利用したいかによります。