だれかブラッシュアップして欲しい。
C拡張がmariadbだけだとするここんなものかな。srcの外にrequiments.txtを入れて変更なければキャッシュ聞くようにしたい。当然ベースはalpine。
プロジェクトの最低限のディレクトリ構成はこんな感じ?
- Dockerfile
- requirements.txt
- .git
- src
- projectname
- settings_docker.py
- app1
- app2
- projectname
FROM python:3.5-alpine
ADD requirements.txt /var/projectname/
RUN apk add --no-cache --virtual .dev gcc make musl-dev mariadb-dev\
&& python3 -m venv /venv \
&& /venv/bin/pip install --upgrade pip \
&& /venv/bin/pip install --no-cache-dir -r /var/projectname/requirements.txt \
&& runDeps="$( \
scanelf --needed --nobanner --recursive /venv \
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
| sort -u \
| xargs -r apk info --installed \
| sort -u \
)" \
&& apk add --virtual .python-rundeps $runDeps \
&& apk del --purge .dev
ADD ./src /var/projectname/
WORKDIR /var/projectname
CMD /venv/bin/gunicorn projectname:application --env DJANGO_SETTINGS_MODULE= projectname.settings_docker --workers 4 --log-level INFO --capture-output --bind 0.0.0.0:8000
あとは環境変数で何とかすれば良い
この形だと、ビルドに必要なパッケージ消す時に、venv以下のsoファイルが見ている依存パッケージだけ残るようになる。そこそこ無駄にファイル入れているとはいえ、実際作ってみた80MBでそこそこ小さくてよかった。
jsを下に入れてたりするとカジュアルにnode_modulesとか入ってくるので.dockerignoreは必要なことは書いて置こう