写Dockerfile的一个小坑

下面是是一个简单的Dockerfile。

FROM centos
ENV LANG en_US.UTF-8
ENV TZ Asia/Shanghai

COPY softs/jdk1.8.0_161 /opt/

RUN set -ex && \
rm /bin/sh && \
ln -sv /bin/bash /bin/sh && \
chmod -R +x /opt

ENV JAVA_HOME /opt/jdk1.8.0_161
ENV CLASSPATH .:$JAVA_HOME/lib/tools.jar:/lib.dt.jar
ENV PATH $JAVA_HOME/bin:$PATH

基础镜像200M + JDK 100M。但总的镜像大小确实400+M,这个为啥呢?
其实这里有个小坑需要注意,就是Dockerfile的分层设计,我们都知道Dockerfile中每行语句都会生成一个新的Dockerfile分层,上一层变为只读(read only)。那么

chmod -R +x /opt

这行是一个递归的修改权限,他会将上面COPY的内容,复制到这层,并修改权限。所以,这里建议大家在COPY之前先将权限修改完成后,再拷贝进镜像。

发布了215 篇原创文章 · 获赞 103 · 访问量 461万+

猜你喜欢

转载自blog.csdn.net/u010278923/article/details/105201114