🕌
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