Member-only story
完璧なPython Dockerfileを作る(前半)
Python のDockerfileについての記事です。長い記事なので前半と後半に分けて投稿いたします。今回は前半です。
プロジェクトのソースコードを変更することなく、Pythonコードのパフォーマンスとセキュリティを向上させることができる方法をご紹介いたします。
目次
- はじめに
- モチベーション
- ベンチマーク
- 更なる最適化
- 完璧なPython Dockerfile
はじめに
信頼性の高いDockerfileをベースにすることで、何時間もの間頭を抱えて悩んだり、将来の大きな問題を回避したりすることができます。
この投稿では、「完璧な」Python Dockerfileをみなさんにご紹介したいと思っています。もちろん、完璧なものなどありませんし、さらなる改善のたのフィードバックを喜んで受け入れます。
要約:
最後まで読み進めると、docker hubにあるデフォルトのものを使うよりも20%高速なDockerfileを載せています。また、それはgunicornのために特別に最適されており、より速く、より安全に構築することができます。
モチベーション
以前のプロジェクトでは、Docker(Alpine)、Python、FFmpegを使ったエラスティックトランスコーダファームを構築しました。
このシステムは非常にコスト効率を良くしなければならなかったので、基盤となるDockerイメージが過剰なオーバーヘッドを生まないようにしたかったのです。
調べてみると、Alpineを使用した場合のFFmpegの実行パフォーマンスと私のPythonコードについてのこのStackOverflowの質問に行き当たりました。
アルパインは小さな会社ですが、同等のライブラリを使用しているため、場合によってはかなり速度が低下することが分かりました。
私はがっかりしました。私のGoプロジェクトでは非常にうまくいっていたのに、Pythonでは小さい画像を得るために使うのがデフォルトになっていたのです。
そのため、私は全く0のところからスタートし、一連のディストリビューションをベンチマークして、新しいデフォルトのdockerイメージを作成しました。