#docker
#docker
Вопрос:
Я хочу создать наименьшее изображение, возможное для моего проекта, поэтому я использую многоступенчатый docker с distroless. Я копирую только те файлы, которые необходимы для выполнения. Из нескольких папок я копирую только .so
файлы, а не копирую всю папку, и я вижу, что созданное изображение становится меньше.
Но есть одна папка, в которой при копировании всей папки я получаю изображение значительно меньшего размера, чем при копировании только .so
файлов.
С помощью следующего файла Dockerfile я копирую всю папку /usr/lib/x86_64-linux-gnu:
#stage 1
FROM some_image AS builder
ADD something /home/
RUN mkdir ...
cmake ...
#stage 2
FROM gcr.io/distroless/cc-debian10
COPY --from=builder /home/some/folders
COPY --from=builder /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu
WORKDIR /home/
CMD ["/bin/bash"]
И размер изображения составляет 618 МБ.
Но со следующим файлом Dockerfile я копирую только *.so
файлы из папки / usr/lib/x86_64-linux-gnu:
#stage 1
FROM some_image AS builder
ADD something /home/
RUN mkdir ...
cmake ...
#stage 2
FROM gcr.io/distroless/cc-debian10
COPY --from=builder /home/some/folders
COPY --from=builder /usr/lib/x86_64-linux-gnu/*.so /usr/lib/x86_64-linux-gnu/*.so.* /usr/lib/x86_64-linux-gnu/
WORKDIR /home/
CMD ["/bin/bash"]
И, что удивительно, размер изображения теперь составляет 683 МБ. Что на 65 МБ больше.
Есть идеи, что может вызвать такие результаты?
Комментарии:
1. Вы проверили результирующее изображение при копировании только папки, чтобы посмотреть, что на самом деле внутри
/usr/lib/x86_64-linux-gnu/
?2. Это основано на imgae без дистрибутива, поэтому оболочки нет. Но я проверяю это с помощью инструмента погружения и вижу, что на одном изображении файлы в x86_64-linux-gnu — это только *.so file, в то время как на другом изображении есть и другие типы. Размер папки x86_64-linux-gnu, содержащей только файлы * .so, составляет 438 МБ, а в другом изображении — 366 МБ.
Ответ №1:
После долгого расследования я обнаружил, что:
- Копирование всей папки с символическими ссылками сохраняет символические ссылки
- Копирование символических ссылок напрямую создает обычные файлы
Итак, в моем случае копирование всех *.so
файлов приводит к копированию каждой символической ссылки как обычного файла, на который указывает эта символическая ссылка. Этот переход приводит к увеличению размера моего изображения.
После того, как я это понял, я погуглил и нашел ссылку здесь