Это нормально по природе docker изображения. Docker изображение основано на нескольких слоях, которые складываются вместе, и каждый слой является неизменным (не может обновить содержимое другого слоя).
Таким образом, когда файл создается в одном слое и удаляется в другом слое, файл все еще существует, но больше не доступен, и большинство инструкций в Dockerfile создают новый слой.
В вашем случае мы уменьшим ваше изображение до 3 слоя для демонстрации:
[Layer that remove the /opt/java folder]
[Layer with the new JRE]
[Base image with the JDK]
Но, в общем, ваше изображение имеет 3 слоя со всеми данными. Вы можете визуализировать его, запустив docker image history myimage
, у вас будет список слоев и их размер.
Если вы хотите уменьшить размер, вам потребуется выполнить многоэтапную сборку: - Первый этап создания JRE - Второй этап импортирует JRE и добавляет к нему свой код
Каждый этап имеет различное базовое изображение, поэтому на втором этапе можно использовать небольшое базовое изображение:
# First stage - Create the JRE
FROM adoptopenjdk/openjdk11:alpine AS jre
RUN /opt/java/openjdk/bin/jlink --module-path=/opt/java/openjdk/jmods \
--add-modules java.desktop,java.datatransfer,java.logging,java.management,java.naming,java.net.http,java.prefs,java.scripting,java.sql,jdk.management,jdk.unsupported,jdk.scripting.nashorn \
--output /opt/songkong/jre
# Second stage
FROM alpine
RUN apk --no-cache add \
ca-certificates \
curl \
fontconfig \
msttcorefonts-installer \
tini \
&& update-ms-fonts \
&& fc-cache -f
COPY --from=jre /opt/songkong/jre /opt/songkong/jre
RUN mkdir -p /opt \
&& curl http://www.jthink.net/songkong/downloads/build1114/songkong-linux-docker.tgz?val=130| tar -C /opt -xzf - \
&& find /opt/songkong -perm /u+x -type f -print0 | xargs -0 chmod a+x
EXPOSE 4567
ENTRYPOINT ["/sbin/tini"]
# Config, License, Logs, Reports and Internal Database
VOLUME /songkong
# Music folder should be mounted here
VOLUME /music
WORKDIR /opt/songkong
CMD /opt/songkong/songkongremote.sh
Для получения дополнительной информации. информация о многоступенчатой сборке: https://docs.docker.com/develop/develop-images/multistage-build/
Для получения дополнительной информации об изображении и слоях: https://docs.docker.com/storage/storagedriver/#images -и-слои