10

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 がキャッシュされない理由を知っている人はいますか?

4

2 に答える 2