Чтобы уменьшить размер Docker-образа, можно использовать несколько подходов:
В вашем Dockerfile используется инструкция ADD для копирования файлов и извлечения архива:
Чтобы уменьшить размер Docker-образа, можно использовать несколько подходов:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В вашем Dockerfile используется инструкция ADD для копирования файлов и извлечения архива:
FROM nginx:latest
ADD /app.tar.gz /usr/share/nginx/html
ADD /config/nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
Вы заметили, что сборка образа занимает больше времени, чем ожидалось, а размер образа увеличивается из-за ненужных файлов. Вы внесли изменения.
После изменений:
- Сборка образа стала занимать меньше времени.
- Размер образа уменьшился, так как больше нет ненужных файлов из архива.
Какие изменения были внесены?
Ответ
Чтобы уменьшить размер Docker-образа, можно использовать несколько подходов:
- Выбор базового образа: Использовать минималистичные образы, например,
alpineвместоubuntu. - Многоступенчатая сборка (multi-stage builds): Сначала собрать приложение в одном образе, а затем копировать только необходимые артефакты в финальный образ.
- Оптимизация слоёв: Объединять команды RUN, чтобы уменьшить количество слоёв.
- Удаление временных файлов: Удалять кэш, временные файлы и пакеты после установки.
- Минимизация зависимостей: Устанавливать только необходимые пакеты и библиотеки.
Пример многоступенчатой сборки:
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]