寫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之前先將權限修改完成後,再拷貝進鏡像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章