一句话结论,可以在拷贝镜像文件的时候,通过如下命令指定user来压缩dockerfile的体积,避免把指定的文件在dockerfile中计算两次。
为什么要指定User?
- 往往,我们会因为安全的要求,不允许使用root用户运行程序。
- 像ElasticSearch这个开源组件要求不能用root用户运行,其实也是出于安全的原因
COPY --chown=sh:sh source /opt/sh
效果展示
先使用dd命令创建1GB的测试文件
dd if=/dev/zero of=testfile bs=1024 count=1048576
测试基础镜像ttbb/base:latest,大小439MB
docker images|grep 'ttbb/base'|grep latest
ttbb/base latest bacdb9e7b5f4 2 weeks ago 439MB
优化前DockerFile
FROM ttbb/base
COPY testfile /opt/sh/testfile
RUN chown -R sh:sh /opt/sh/testfile
大小
1280d315e09d 31 seconds ago 2.59GB
可以看到testfile计算了两次,大小达到了2G多。
优化后DockerFile
FROM ttbb/base
COPY --chown=sh:sh testfile /opt/sh/testfile
大小
115b68bc4db8 21 seconds ago 1.51GB
testfile仅计算一次,仅使用1.5G。