Py学习  »  docker

为什么我的docker图像比du-hd 1更大/

PaulZhu • 3 年前 • 1301 次点击  

当我使用 openjdk:8u171-alpine 来构建我的java应用程序。

图像的大小比我想象的要大。

这个 openjdk:8u171阿尔卑斯山 只有103MB,我的测试jar文件大约30MB。

但我的新docker图像是160MB。

我不知道为什么。所以我用 docker run --rm -it openjdk:8u171-alpine du -hd 1 .结果如下

4.0K    ./home
4.0K    ./srv
1.6M    ./etc
4.0K    ./root
2.8M    ./lib
4.0K    ./mnt
95.8M   ./usr
16.0K   ./media
0       ./sys
0       ./dev
224.0K  ./sbin
784.0K  ./bin
4.0K    ./run
0       ./proc
4.0K    ./tmp
68.0K   ./var
101.3M  .

当我在docker图像中运行相同的

4.0K    /home
4.0K    /srv
1.6M    /etc
8.0K    /root
2.8M    /lib
4.0K    /mnt
95.8M   /usr
16.0K   /media
0       /sys
0       /dev
224.0K  /sbin
784.0K  /bin
4.0K    /run
0       /proc
4.0K    /tmp
68.0K   /var
29.8M   /app
4.0K    /logs
131.1M  /

它只有131.1MB, 但当我使用 docker images 输出显示160MB

d3ac9dcbe21c   20 minutes ago   165MB

这是我的dockerfile

FROM openjdk:8u171-alpine
MAINTAINER zhujiaxin<783725554@qq.com>
ENV LOGLEVEL=info
VOLUME ["/logs"]
RUN mkdir /app
WORKDIR /app
ARG JAR_FILE
COPY /target/$JAR_FILE app.jar
RUN chmod 775 app.jar
ENTRYPOINT ["java","-jar","app.jar"]
CMD []
EXPOSE 8080

我的jar文件只有30M

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132839
 
1301 次点击  
文章 [ 2 ]  |  最新文章 3 年前
PaulZhu
Reply   •   1 楼
PaulZhu    3 年前

当我将dockerfile更改为

FROM openjdk:8u171-alpine
MAINTAINER zhujiaxin<783725554@qq.com>
ENV LOGLEVEL=info
VOLUME ["/logs"]
RUN mkdir /app && chmod 775 /app
WORKDIR /app
ARG JAR_FILE
COPY /target/$JAR_FILE app.jar
ENTRYPOINT ["java","-jar","app.jar"]
CMD []
EXPOSE 8080

新的图像是134M,所以当运行一些命令时,在文件复制之前运行它。

新图层将从字典中复制文件。

BMitch
Reply   •   2 楼
BMitch    3 年前

docker分层文件系统是写时拷贝,该拷贝位于文件级别,而不是单个文件系统块。这意味着对具有chmod的文件的权限位进行更改会导致将整个文件复制到新层:

COPY /target/$JAR_FILE app.jar
RUN chmod 775 app.jar

结果是一个30MB的文件将占用2倍的空间,每层一次,权限不同。理想情况下,您应该在源位置修复文件权限,以避免对文件进行chmod。然后,在运行中只需要复制步骤,而不需要添加chmod:

COPY /target/$JAR_FILE app.jar