web-dev-qa-db-ja.com

マルチステージビルドを使用してpython(docker)画像サイズを縮小するにはどうすればよいですか?

pythonとDockerfileを使用してマルチステージビルドを作成する方法を探しています:

たとえば、次の画像を使用します。

1番目のイメージ:すべてのコンパイル時間要件をインストールし、必要なものをすべてインストールpython modules

2番目のイメージ:コンパイラー(gcc、postgers-dev、python-devなど)なしで、すべてのコンパイル済み/ビルド済みパッケージを最初のイメージから2番目のイメージにコピーします。

最後の目的は、pythonとpython必要なパッケージを実行することです。

要約すると、コンパイルされたすべてのモジュールを「ラップ」する方法(サイトパッケージ/外部ライブラリ)、最初のイメージで作成されたもの、および「クリーン」な方法でコピー、2番目の画像へ。

13
gCoh

わかりましたので、私のソリューションはホイールを使用しています。最初のイメージでコンパイルし、すべての依存関係のホイールファイルを作成して、コンパイラをインストールせずに2番目のイメージにインストールします。

FROM python:2.7-Alpine as base

RUN mkdir /svc
COPY . /svc
WORKDIR /svc

RUN apk add --update \
    postgresql-dev \
    gcc \
    musl-dev \
    linux-headers

RUN pip install wheel && pip wheel . --wheel-dir=/svc/wheels

FROM python:2.7-Alpine

COPY --from=base /svc /svc

WORKDIR /svc

RUN pip install --no-index --find-links=/svc/wheels -r requirements.txt

これに関する私の答えは、次のブログ投稿で確認できます。

https://galnevis.wixsite.com/website/single-post/2018/02/10/Python-and-Docker-multistage-build

11
gCoh