2017-11-13 8 views
1

既存のDjangoアプリケーションをドッキングする方法について私の頭を覆すことはできません。 私はDockerイメージの作成中にDjangoプロジェクトを作成する方法を説明するDockerによってthis official manualを読んだことがありますが、同じ方法で既存のプロジェクトをドッキングすることが必要です。既存のDjangoプロジェクトをドッキングする

このアプローチの主な目的は、ドッキング・イメージを常にローカルに構築する必要がなく、ドッキング・ハブ・ウォッチャーが接続されたリモート・リポジトリーに自分のコードをプッシュすることです。コードベースが更新されると直ちにサーバー上に自動的に構築されます。今、私のDockerfileがどのように見えるために

:私が説明してきた機能を実現するために:(どうやって?そうであれば)

FROM python:3 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install Django 
RUN pip install djangorestframework 
RUN pip install PyQRCode 
ADD . /code/ 

は、誰もが、私はDockerfileを構成すべきであると私はdocker-compose.ymlを使用する必要がない方法を説明していただけますか?この質問のための

ソリューション:

FROM python:3 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
RUN pip install *name of package* 
RUN pip install *name of another package* 
ADD . /code/ 
EXPOSE 8000 
CMD python3 manage.py runserver 0.0.0.0:8000 

OR

FROM python:3 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 
EXPOSE 8000 
CMD python3 manage.py runserver 0.0.0.0:8000 

requirements.txtは、例えば、パッケージのプレーンなリストでなければなりません:

Django==1.11 
djangorestframework 
pyqrcode 
pypng 
+0

新しいdjangoプロジェクトを作成して、古いファイルをすべてダンプできますか?何か2つを微調整する必要があるかもしれませんが、よりシンプルにすることもできます – SuperStew

+0

これは明らかに簡単です。もし解決策が見つからなければ、確かにそうするでしょうが、今はよりエレガントに溶液。 –

答えて

2

この質問i広すぎる。作成したDockerファイルはどうなりますか?

相互作用が必要な複数のコンテナがない限り、ドッカーの作成は不要です。あなたの現在のDockerfileから

いくつかの一般的な観察:

  • ピップは単一のステートメントにコマンドをインストール崩壊する方が良いだろう。ドッカーでは、各ステートメントはファイルシステムレイヤーを作成し、ピップインストールコマンドの間のレイヤーはおそらく有用な目的を果たしません。
  • 再現可能なビルドを確実にするためには、setup.pyまたはrequirements.txtファイル(pip install -r requirements.txt)の依存関係を固定のバージョン番号(foopackage==0.0.1)で宣言することをお勧めします。
  • コードディレクトリを直接追加するのではなく、PythonパッケージにDjangoアプリケーションをパッケージ化し、pip(cd /code/; pip install .)でインストールすることをお勧めします。
  • アプリを実行するためのステートメント(CMDまたはENTRYPOINT)がありません。 https://docs.docker.com/engine/reference/builder/#cmd
+0

さて、Dockerファイルはdocker hub watcherから見えます。それに応じて、イメージはリモートサーバー上に構築されます。 –

+0

欠けていたビットは実際には "CMD python3 manage.py runserver 0.0.0.0:8000"であり、このビルド後にリモートサーバーで作業しました。ありがとうございました。 –

1

@AlexForbesは非常に良い点を挙げました。あなたがDjangoのための超簡単なDockerfileをしたい場合しかし、あなたはおそらく行うことができます。少し-onbuild修飾子はあなたが必要なもののほとんどを行い

docker run myimagename runserver 

:あなたは、その後で、あなたのコンテナを実行

FROM python:3-onbuild 
RUN python manage.py collectstatic 
CMD ["python", "manage.py"] 

。それは/usr/src/appを作成し、それを作業ディレクトリとして設定し、内部にすべてのソースコードをコピーし、pip install -r requirements.txt(これは忘れてしまいます)を実行します。最後に統計情報を収集します(統計情報がどこかでホストされている場合は、必要ではないかもしれません)。そして、デフォルトコマンドをmanage.pyに設定してください。

Celery、Redisなどの他のコンテナを実行する必要がある場合は、docker-composeが必要です。

+0

良い答え、私はonbuildのことを知らなかった –

関連する問題