Dockerについて私が理解していることから、Dockerは仮想環境で使用されるツールです。彼らの用語では、それは「コンテナ化」と呼ばれています。これは多かれ少なかれPythonのvirtualenvが行うことです。ただし、Dockerではvirtualenvを使用できます。それで、それは仮想環境内の仮想環境ですか?これがどのように機能するかについて私は混乱しているので、誰かが明確にしてくれませんか?
Dockerについて私が理解していることから、Dockerは仮想環境で使用されるツールです。彼らの用語では、それは「コンテナ化」と呼ばれています。これは多かれ少なかれPythonのvirtualenvが行うことです。ただし、Dockerではvirtualenvを使用できます。それで、それは仮想環境内の仮想環境ですか?これがどのように機能するかについて私は混乱しているので、誰かが明確にしてくれませんか?
回答:
virtualenvは、Pythonの依存関係のみをカプセル化します。DockerコンテナはOS全体をカプセル化します。
Python virtualenvを使用すると、Pythonのバージョンと依存関係を簡単に切り替えることができますが、ホストOSで立ち往生しています。
Dockerイメージを使用すると、OS全体を交換できます。PythonをUbuntu、Debian、Alpine、さらにはWindows ServerCoreにインストールして実行します。
考えられるOSとPythonのバージョンのすべての組み合わせを備えたDockerイメージがあり、Dockerがインストールされている任意のシステムでプルダウンして使用する準備ができています。
上記に加えて、dockerとvenvを組み合わせる場合があります。一部のOSには、「OS-near」アプリを提供するためにPythonがインストールされて出荷されます。たとえば、私の知る限り、debian(およびその派生物)に適しています。python venvを使用すると、開発者は、OSに同梱されているPythonに影響を与えることなく、異なるインタープリターバージョンを必要とするPythonアプリを出荷できます。さて、上記のようにDockerは「OS全体を分離する」ので、同じことがDockerイメージにも当てはまります。したがって、私の見解では、Dockerイメージが必要/望ましい場合は、PythonアプリのDockerイメージ内にvenvを作成することをお勧めします。