私はかなり多くの場合、Dockerを使ってPythonを開発しています(Flask開発者)。あなたがPyCharmを使用しない限り、Virtualenvsは管理するのが面倒です。
FROM python:3.6
# Install requirements
RUN pip install django==VERSION \
package==version
ADD . /code
WORKDIR /code
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
とlocalhost
コンテナホストファイルに存在しないため、実行
$ docker build -t IMAGE_NAME .
$ docker run -it \
-p 8000:8000 \
--mount src=$(pwd),target=/code,type=bind \
-e DEBUG=1 \
IMAGE_NAME
には0.0.0.0とホストを持つことが重要です。 --mount
と-e DEBUG=1
を組み合わせることで、変更時のホットリロードを利用できます。あなたは、このような
DEBUG = os.getenv('DEBUG') or 0
これは、フラスコの開発を行っているときに私が使用するものであるとしてmanage.py
変更する必要があります。
EDITはちょっと、これはすべてのご質問
私はいつも、私はDBのバックエンドを交換することができ、複数のコンテナを行い応答しない場合に実現Iそうしてください。 (
$ docker volumes inspect data
は、私が先に述べたdocker run
コマンドは基本的にコンファイルに書き換えられ...
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DEBUG=1
volumes:
- type: bind
source: .
target: /code
db: # This is the host name
image: postgress:10.1
environment:
- POSTGRESS_USER=USERNAME
- POSTGRESS_PASSWORD=PASS
- POSTGRESS_DB=DBNAME
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
あなたはこの例data
で指定されたボリュームを宣言する必要があり、あなたはそれが経由して保存場所を確認することができますドッカーの作成は基本的なAPIを呼び出すだけなので)。あなたは、実際にcomposeを使うのではなく、dockerのCLIを使ってバックグラウンドでpostgressコンテナを起動することができましたが、複数のコンテナで作業する方がはるかに簡単です。明示的に定義されたネットワークがなかったので、コンテナはデフォルトのネットワークを作成し、バインドするだけです。データベースコンテナのホスト名は、db
か、サービスを呼び出すことを決めたものです。だから、あなたのpythonファイルでは、あなたの接続のホスト名としてそれを使う必要があります。
マイグレーションについては、Webコンテナで実行する必要があります。私は実際にDjangoデベロッパーをしていませんが、それがFlaskの移行と似ているなら、私はこれが当てはまると思います。
$ docker exec -it web_container_name/hash /bin/bash
[email protected]_container_hash# python manage.py makemigrations
[email protected]_container_hash# python manage.py migrate
EDIT 2
これらのコマンドを実行している場合、それはあなたの移行を作成する必要がありますし、/code
が実際にあなたのローカルディレクトリにバインドされているので、それはあなたのローカルマシンに保存されます。
私はコンテナ内で開発しません。新しいコミットを押す前に、テストを内部で実行してください。 'runserver'を使ってdjangoをvirtualenvでローカルに開発するのは簡単です。 – dahrens
ちょうどヒント - ドッカーの作成を試み、 'web'コンテナを' db'コンテナから分離してください。 – jcfollower
@jcfollowerあなたは精巧にできますか?なぜ私は別の容器を使うべきですか? –