Dockerfile在RUN composer install命令中没有使用缓存

时间:2017-06-20 15:24:59

标签: docker docker-compose dockerfile

我以为我已经理解了Docker,但今天我发现了一些关于利用docker cache的问题。

这是我的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"]

我希望docker在ADD . .

之前使用缓存

然而,每次构建,看起来像docker每次都尝试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,如果这有助于调查。

请告知。

1 个答案:

答案 0 :(得分:0)

作为一种解决方法,您可以创建两个Dockerfiles。一个在您想要缓存的位置创建图像。然后,第二个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"]