Dockerについて私が理解していることから、それは仮想環境に使用されるツールです。彼らの専門用語では、「コンテナ化」と呼ばれます。これは多かれ少なかれPythonのvirtualenvが行うことです。ただし、virtualenv in Dockerを使用できます。それで、それは仮想環境の中の仮想環境ですか?私はこれがどのように機能するかについて混乱していますので、誰かが明確にしてくださいますか?
Virtualenvは、Python依存関係のみをカプセル化します。 Dockerコンテナーは、OS全体をカプセル化します。
Python virtualenvを使用すると、Pythonバージョンと依存関係を簡単に切り替えることができますが、ホストOSにとどまっています。
Dockerイメージを使用すると、OS全体をスワップアウトできます。Ubuntu、Debian、Alpine、さらにはWindows Server CoreにPythonをインストールして実行します。
Dockerがあります images 考えられるOSとPythonバージョンのすべての組み合わせで、Dockerがインストールされたシステムでプルダウンして使用する準備ができています。
Python仮想環境はPythonランタイムのみを「コンテナー化」します。つまり、pythonインタープリターとpythonライブラリーに対して、Dockerはシステム全体(ファイルシステム全体、すべてのユーザー、スペースライブラリ、ネットワークインターフェイス)。したがって、Dockerは仮想環境よりも仮想マシンにはるかに近いものです。
上記に加えて:dockerとvenvを組み合わせる場合があります:一部のOSにはpythonがインストールされており、 'OS-near'アプリを提供します。たとえば、私の知る限り、debian(およびその派生物) 。 python venvを使用すると、OSに同梱されているpythonに影響を与えることなく、異なるインタープリターバージョンを必要とするpythonアプリを出荷できます。さて、Dockerは上記のように「OS全体を分離する」ため、Dockerイメージにも同じことが当てはまります。したがって、私の見解では、Dockerイメージが必要/望ましい場合、pythonアプリのDockerイメージ内にvenvを作成するのがベストプラクティスです。