ドッカーとコンテナは、仮想環境を必要としないと思わせるかもしれません。 distutil
のGlpyhは、この誤解に対して非常に魅力的な議論をしていますin this pycon talk。
virtualenv
の基本的な側面は、基本的にLinuxディストリビューションを実行しているため、非コンテナ化アプリケーションの場合と同様にコンテナに適用されます。
DebianとRed Hatは非常に複雑なエンジニアリングプロジェクトです。 数十億行のCコードを統合しています。たとえば、ちょうどapt install libavcodec
です。またはyum install ffmpeg
。
これらのことのいずれかのために作業用のビルド システムを書くことは博士論文です。彼らは同時に 作業環境を一つにPythonパッケージの 数千人を統合します。彼らは常に彼らのツールは、Python かを使用するかどうかを教えてくれません。あなたsudo pip install
そこでは、アプリケーション、は今それがすべてを壊れている場合
だから、あなたは コンテナ内のいくつかのツールをexecしドッカーする場合があります、彼らは、Pythonで書かれている可能性があります。
はそうでも容器に、かかわらず、あなたは常に仮想環境で、あなたのアプリケーションを実行する必要がありドッキングウィンドウを使用したりしていないかどうかのシステムの
からアプリケーションコードを隔離します。 virtualenvのを使用して、特にドッキングウィンドウで今すぐ
はそれがあるべきより少しトリッキーです。ドッキングウィンドウの中に孤立した各RUN
コマンドを実行すると、ファイルシステムの変更以外に無い状態ではラインからラインに保たれています。あなたが活性化command on every lineを付加する必要がvirutalenv
にインストールするには:
RUN apt-get install -y python-virtualenv
RUN virtualenv /appenv
RUN . /appenv/bin/activate; \
pip install -r requirements.txt
ENTRYPOINT . /appenv/bin/activate; \
run-the-app
@SebestianWozny非常に広範な答え、ありがとう。私は可能な例で問題を編集しました(本当に関連し、私の間違いではない場合)。 –
おそらくvirtualenvですべての行でそれを実行していない間違いをしました。 –
また、 'pip install djangorestframework'を' pip freeze'するのではなく、 –