2017-06-20 21 views
4

我以爲我已經理解了Docker,但是今天我發現了一些關於使用docker緩存的問題。Dockerfile沒有在RUN作曲者安裝命令中使用緩存

這裏是我的dockerfile

FROM quay.io/my_company/phpjenkins 

WORKDIR /usr/src/my_project 
ADD composer.json composer.json 
ADD composer.lock composer.lock 

RUN composer install -o 

ADD . . 

RUN mkdir -p temp/unittest/cache log 

RUN cp app/config/config.unittest.template.neon app/config/config.unittest.neon 

CMD ["tail", "-f", "/dev/null"] 

我希望泊塢窗使用高速緩存,直到ADD . .

然而,每一個構建,看起來像搬運工想盡一切時間做composer install

下面是一些輸出

+ docker-compose -f docker-compose.yml run app vendor/bin/phpunit -d memory_limit=2048M 
Creating network "xxx_default" with the default driver 
Creating xxx_rabbitmq_1 
Creating xxx_mysql_1 
Building app 
Step 1/9 : FROM quay.io/my_company/phpjenkins 
---> f10ea65fb7df 
Step 2/9 : WORKDIR /usr/src/my_project 
---> Using cache 
---> 07ad76770cd2 
Step 3/9 : ADD composer.json composer.json 
---> Using cache 
---> 0d22314b81af 
Step 4/9 : ADD composer.lock composer.lock 
---> Using cache 
---> 3d41825efcb3 
Step 5/9 : RUN composer install -o 
---> Running in 38de5f08eb46 
Warning: This development build of composer is over 60 days old. It is recommended to update it by running "/usr/local/bin/composer self-update" to get the latest version. 
Do not run Composer as root/super user! See https://getcomposer.org/root for details .... 
... 
---> aa05dc9ddc5f 
Removing intermediate container 581aa7e4b00f 
Step 6/9 : ADD . . 
---> 8796a9235b9a 
Removing intermediate container b7354231fbd7 

我跑出來的鉛,這可能是可能的事情,dockerfile沒有,如果使用緩存RUN composer install命令

我在Debian使用Docker version 17.05.0-ce, build 89658be幫助調查。

請指教。

+2

拿起你的輸出是從最初的'泊塢窗,compose'。你有沒有輸出連續嘗試在第5步沒有使用緩存? –

+0

嗨@MattSchuchard,我不確定哪裏可以得到你的信息。但在步驟5)中,它不顯示「使用緩存」,這是不是意味着它根本沒有嘗試? – chaintng

+1

如果命令字符串「composer install -o」發生更改,則運行命令緩存應該失效,因此不應該發生這種情況:https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices /#build-cache 如果您嘗試任何其他命令,僅用於測試目的,它是否與緩存匹配? –

回答

0

作爲解決方法,您可以創建兩個Docker文件。一個在你想要緩存的地方創建一個圖像。第二個Dockerfile然後可以使用第一個圖像作爲其基礎,並根據需要進行修改。

FROM quay.io/my_company/phpjenkins 

WORKDIR /usr/src/my_project 
ADD composer.json composer.json 
ADD composer.lock composer.lock 

RUN composer install -o 

CMD ["tail", "-f", "/dev/null"] 

中構建此文件mycomposerimage使用

docker build -t mycomposerimage . 

然後第二dockerfile從那裏

FROM mycomposerimage 
WORKDIR /usr/src/my_project 
ADD . . 

RUN mkdir -p temp/unittest/cache log 

RUN cp app/config/config.unittest.template.neon app/config/config.unittest.neon 

CMD ["tail", "-f", "/dev/null"] 
相關問題