🕌

DockerでPython環境構築時の小技

に公開

この記事で言いたいこと

ほかのPythonスクリプトたちよりも先にrequirements.txtだけコピーしてpip installしておいた方が良い

言いたいことの詳細

Dockerを使って開発する場合、「WSL上に置いてあるデータやファイル」をイメージ上にコピーする必要がある

その際のDockerfileの記載方法は、

COPY <コピー元> <コピー先>
  • コピー元: ビルドコンテキスト(通常はdocker buildを実行したディレクトリ配下)のファイルやフォルダ
  • コピー先: イメージ内のパス(この時点のWORKDIRが基準になる)

通常は、複数のPythonスクリプトを集約した親ディレクトリをイメージ上にコピーする

このコピーをする前に、requirements.txtだけコピーした方が良い

言いたいことを支える理由

Dockerではコンテナを生成する際に、以前コンテナを生成したデータ(これをビルドキャッシュという)を再利用する

WORKDIR /app               # レイヤー2
COPY requirements.txt .    # レイヤー3
RUN pip install -r requirements.txt   # レイヤー4
COPY app ./app             # レイヤー5

もし上記レイヤー3でファイルの中身が以前と変わっていない場合、レイヤー4ではこのコマンドの実行はスキップされ前回インストールしたデータ(キャッシュ)を使うようになる

このキャッシュはできるなら利用した方が良い。なぜなら、pip installは時間がかかるため、できるだけやらないで済むならやらない方が良いからである

Discussion