2

これについてはよくわかりませんが、ワイルドカードを使用してファイルをコピーすると、docker レイヤーのキャッシュが壊れることに気付きました。次のビルド コンテキストを参照してください。

ここに画像の説明を入力

問題は、Kernel.phpを変更(スペースなどを追加) してdocker build再度実行すると、composer データが変更されていなくても、「copy composer.*」の後のレイヤーが毎回再実行されることです...

ファーストラン

=> [1/6] FROM docker.io/library/composer               
=> [2/6] RUN set -eux;     composer global require hira
=> [3/6] COPY composer.* ./                            
=> [4/6] RUN set -eux;     composer install         --i
=> [5/6] COPY app/ /app/app/                           
=> [6/6] RUN set -eux;     composer dump-autoload ...

編集Kernel.phpして再度実行します:

=> [1/6] FROM docker.io/library/composer              
=> CACHED [internal] helper image for file operations 
=> CACHED [2/6] RUN set -eux;     composer global requ
=> [3/6] COPY composer.* ./                           
=> [4/6] RUN set -eux;     composer install         --
=> [5/6] COPY app/ /app/app/                          
=> [6/6] RUN set -eux;     composer dump-autoload  ..

この動作は、次の変更で修正できます。

COPY composer.json ./
COPY composer.lock ./

それ以外の

COPY composer* ./

しかし、私を悩ませているのは、なぜこれが起こっているのですか? 私はこれで数時間を失いました:/

Docker のバージョン

➜  composer docker version
Client:
 Version:           19.03.8-ce
 API version:       1.40
 Go version:        go1.14
 Git commit:        afacb8b7f0
 Built:             Mon Mar 16 22:23:09 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.8-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.14
  Git commit:       afacb8b7f0
  Built:            Mon Mar 16 22:22:53 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.3.m
  GitCommit:        d76c121f76a5fc8a462dc64594aea72fe18e1178.m
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

ファイルは次のとおりです。

composer.json

{
    "name": "test/docker_composer_cached",
    "authors": [
        {
            "name": "Kitensei"
        }
    ],
    "require": {
        "moc/math": "dev-master"
    },
    "minimum-stability": "dev"
}

Dockerfile

# syntax=docker/dockerfile:1.0-experimental
FROM composer

COPY composer.* ./

RUN set -eux; \
    composer install \
        --ignore-platform-reqs \
        --no-autoloader \
        --no-dev \
        --no-interaction \
        --no-scripts \
        --no-suggest \
        --no-plugins \
        --no-progress \
        --prefer-dist \
    ; \
    find vendor -name ".git" -type d | xargs rm -rf

COPY app/ /app/app/

RUN set -eux; \
    composer dump-autoload \
        --classmap-authoritative \
        --optimize \
        --no-scripts \
        --no-dev


App\Kernel.php

<?php

namespace App;

class Kernel {

}
4

0 に答える 0