社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

PaulZhu • 3 年前 • 1262 次点击  

当我使用 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
 
1262 次点击  
文章 [ 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