mmag

ハマったことメモなど

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しないといけないんじゃないのって感じでお見送り。