[go][python] 依存パッケージのファイルは先にCOPYしてdocker buildを高速化する

docker buildすると依存パッケージのインストールが走ります。

理想的には依存パッケージに変更がなければ依存パッケージのインストールはキャッシュしたいところです。

しかしながらうまくDockerfileを作らないと毎回docker build時に依存パッケージのインストールが走ってしまいます。

依存パッケージのインストールをキャッシュするためには依存パッケージを記述したファイルのみ、先にCOPYしてパッケージのインストールを行います。
ソースコードはDockerfileの最後の方でCOPYします。
こうすることでソースコードに変更が合った場合、依存パッケージのインストールはキャッシュされ、ソースコードのコピーのみ処理が走ります。

goの場合、depパッケージマネージャを使うならGoPkg.tomlとGoPkg.lockのみ先にコピーします。
パッケージインストール時はdep ensure -vendor-only=trueにすることでソースコードの解析が走らずにパッケージのインストールが走ります。dep ensureのみで実行してしまうと、この部分がソースコードに依存してしまうのでソースコードに変更があるとパッケージの再インストールが走ってしまいます。

サンプル

https://github.com/garicchi/docker-sample

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.