CircleCI でdockerを実行していますが、COPY コマンドのキャッシュに問題があります。
Circle CI ドキュメントでは、既知のキャッシュの問題について言及しており、この perl スクリプトを使用してコピーされたファイルにタイムスタンプを設定し、キャッシュを保持することを推奨しています。
Docker のベスト プラクティス ドキュメントには次のように記載されています。
ADD および COPY 命令の場合、イメージに入れられるファイルの内容が調べられます。具体的には、ファイルのチェックサムが実行され、そのチェックサムがキャッシュ ルックアップ中に使用されます。
CircleCi の推奨事項に従って、キャッシュをディスクに保存し、次のテスト実行時に再度読み込みます。これは、COPY キャッシュの前のコマンドとして正しく機能しているようです。
デバッグするために、ローカルにコピーしようとしているファイルの md5 チェックサムを出力してから、docker コンテナーから出力すると、正しく一致します。したがって、理論的にはキャッシュがロードされるはずです。Docker が md5 をチェックサムとして使用しているかどうかはわかりません。
これは私の現在の circle.yml です:
マシン: サービス: - ドッカー
dependencies:
cache_directories:
- "~/docker"
pre:
- mkdir -p ~/docker
override:
- docker info
- if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi
- docker images
- docker build -t circles .
checkout:
post:
- ls -l
- ./timestamp-set-to-git.pl
- ls -l
test:
override:
- md5sum .bowerrc
- docker run circles md5sum .bowerrc
- docker save circles > ~/docker/image.tar
これは、チェックサム ステップのビルド出力です。
$md5sum .bowerrc
8d1a712721d735bd41bf738cae3226a2 .bowerrc
$docker run circles md5sum .bowerrc
8d1a712721d735bd41bf738cae3226a2 .bowerrc
しかし、次のようにdocker build報告しています。
Step 6 : RUN sudo npm install -g phantomjs gulp
---> Using cache
---> a7bbf2b17977
Step 7 : COPY .bowerrc /var/work/.bowerrc
---> 7ad82336de64
COPY がキャッシュされない理由を知っている人はいますか?