1. ホーム
  2. python

[解決済み] Docker 変更があった場合のみ pip requirements.txt を実行するには?

2022-08-03 02:04:30

質問

Dockerfileの中で、以下のようなレイヤーをインストールしています。 requirements.txt :

FROM python:2.7
RUN pip install -r requirements.txt

docker イメージをビルドすると、全てのプロセスが実行されます。 に関わらず このファイルに加えられた変更の有無にかかわらず。

Dockerはどのようにすれば pip install -r requirements.txt を実行するようにするにはどうしたらいいですか?

Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
 ---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
  Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))

どのように解決するのですか?

ビルドプロセスのある時点で、アプリケーション全体をDockerイメージにコピーすることを想定し COPY または ADD :

COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r requirements.txt

問題は、アプリケーション全体をイメージにコピーするたびに、Dockerのビルドキャッシュを無効にしていることです。これはまた、それ以降のすべてのビルド手順でキャッシュを無効にしてしまいます。

これを防ぐために、コピーした のみをコピーすることをお勧めします。 requirements.txt ファイルのみを、アプリケーション全体をイメージに追加する前に、別のビルドステップで実行します。

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
COPY . /opt/app
# continue as before...

要件ファイル自体が変更されることはほとんどないでしょうから、アプリケーションコードを画像に追加する時点まで、キャッシュされたレイヤーを使用することができるようになります。