2017-02-25 3 views
4

docker djangoアプリケーション内のvirtualenvの目的は何ですか? Pythonや他の依存関係は既にインストールされていますが、同時にpipを使用してたくさんのパッケージをインストールする必要があります。したがって、矛盾はまだ不明です。ドッカーコンテナ内のvirtualenvでdjangoアプリケーションを実行する目的は何ですか?

概念を説明してください。

EDIT:また、たとえば、 I'vは、ドッキングウィンドウのDjangoのアプリ内virtualenvの作成や、最近pip freeze djangorestframeworkをインストールし、settings.pyにインストールにこれを追加しましたが、docker-compose upがチェックエラー. No module named rest_framework.を発生させ、すべてが正しい.ドッカー/ virtualenvの競合ですか?それは可能でしょうか?

答えて

7

ドッカーとコンテナは、仮想環境を必要としないと思わせるかもしれません。 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 
+1

@SebestianWozny非常に広範な答え、ありがとう。私は可能な例で問題を編集しました(本当に関連し、私の間違いではない場合)。 –

+2

おそらくvirtualenvですべての行でそれを実行していない間違いをしました。 –

+0

また、 'pip install djangorestframework'を' pip freeze'するのではなく、 –

3

virtualenvはパッケージを特定の環境に隔離するためのものです。 Dockerは設定を特定の環境に隔離するためにもあります。したがって、本質的に、ドッカーを使用する場合、virtualenvもあまり効果がありません。

ドッキング環境に直接ピップインストールするだけで問題ありません。要件をピップインストールするには、コマンドを実行できるdockerfileを使用します。

下記の擬似コードの例があります。

FROM /path/to/used/docker/image 
RUN pip install -r requirements.txt 
+0

ドッカーするピップで何かをインストールするコマンドは何ですか?パスの競合はありません –

+0

@Vinand私は例を追加しました。 pipと一緒にインストールするとpipがdocker環境にグローバルにインストールされるので、これとのパスの競合はないはずです。 – Jonathan

関連する問題