ftnext / PyConTalkSummary

PyConで聞いたトークのサマリーをIssueに蓄積(arXivTimesリスペクト)
0 stars 0 forks source link

[EuroPython2020] Best practices for production-ready Docker packaging #26

Open ftnext opened 4 years ago

ftnext commented 4 years ago

https://ep2020.europython.eu/talks/CeKGczx-best-practices-for-production-ready-docker-packaging/

一言でいうと

Dockerで環境を持ち運ぶためのベストプラクティス Iterative approach を共有

発表資料リンク

発表者/所属

Itamar Turner-Trauring (PythonSpeed)

発表日付

2020/07/23

概要

Iterative approach

  1. まず動かし
  2. セキュリティ解消
  3. CIで動かす
  4. デバッグしやすく
  5. 正しく動作するように改善
  6. ビルドの再現性
  7. 早くビルド
  8. 小さいイメージ

重要なものが先にくる

[3段落くらいでまとめる]


[以下はオプション]

新規性・差分

以下は初めて聞いた

トークで知って試したいこと

一通り手を動かしたい https://pythonspeed.com/europython2020/ にて有料資料あり

2. セキュリティ

Don't run as a root

RUN useradd --create-home appuser
USER appuser
WORKDIR /home/appuser
COPY . .
RUN pip install --user .

3.CI

hand-buildしない シェルスクリプトを作る(buildしてpush)

set -euo pipefail →https://qiita.com/d_shimizu/items/c01f29f8398cc7f5c396

branchに応じたタグを付けられる GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) https://qiita.com/karupanerura/items/721962bb7da3e34187e1

週に1度はキャッシュを使わない --pull --no-cache

4.デバッグしやすく

CIでエラーに多く遭遇するようになるので、区別できデバッグしやすくする

ENV PYTHONFAULLTHANDLER=1 Cのコードのエラーが握りつぶされない https://docs.python.org/ja/3/using/cmdline.html#envvar-PYTHONFAULTHANDLER

5.operational correctness

早くスタート→pycを作っておく

python -m compileall yourpackage/ https://docs.python.org/ja/3/library/compileall.html

6.Reproducible

時間が経つにつれて、依存関係が変わってしまう

python:3.8-slim-buster(Debianのstable)

requirementsもlockする

7. faster

alpineを使わない 小さいがPyPIにあるwheelを使えない→遅くなる

依存関係のインストールをコードと分ける 依存関係のlayerができる(変更されにくい)

8. smaller

pip install --no-cache-dir https://pip.pypa.io/en/stable/reference/pip_install/#caching

感想

6について CIが構築されていれば、テストが落ちた段階でバージョン固定の必要性に気づけるので、 固定しない(ガンガン最新のバージョンに上げる)という考え方もあるのではないかと思った