PipenvとDocker Compose
最近Djangoのプロジェクトをつくっているのですが、docker-compose up
で立ち上がるようにしておこうとググったところ、なんかイマイチじゃない?ってのが多く出てきたので、自分なりのやつを書いておきます。
Dockerfile
FROM python:3.7-slim RUN apt-get update -qq ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV PIPENV_VENV_IN_PROJECT 1 WORKDIR /app RUN pip install pipenv
docker-compose.yml
version: '3.7' services: db: image: postgres:11.1-alpine volumes: - postgresql:/var/lib/postgresql/data app: build: . command: pipenv run server volumes: - .:/app:cached ports: - 7000:7000 depends_on: - db volumes: postgresql:
Pipfile
[[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] [requires] python_version = "3.7" [scripts] server = "python manage.py runserver 0.0.0.0:7000" test = "python manage.py test"
ポイントとしてはPIPENV_VENV_IN_PROJECT=1
にして、.venv
をDocker Composeのvolumesに入るようにするとこ。ググって出てきたイマイチっぽいやつは、Dockerfileの中でPipfileとPipfile.lockをCOPY
してpip install
をやっちゃうやつ。これだと新しい依存を追加するたびにbuildしないといけないんじゃないのって感じでお見送り。