LoginSignup
1
1

More than 5 years have passed since last update.

python系の奴をdocker deployする時に出来るだけimageを軽くする

Last updated at Posted at 2017-12-04

だれかブラッシュアップして欲しい。

C拡張がmariadbだけだとするここんなものかな。srcの外にrequiments.txtを入れて変更なければキャッシュ聞くようにしたい。当然ベースはalpine。

プロジェクトの最低限のディレクトリ構成はこんな感じ?

  • Dockerfile
  • requirements.txt
  • .git
  • src
    • projectname
      • settings_docker.py
    • app1
    • app2
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は必要なことは書いて置こう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1