Основные ошибки при написании dockerfile
-нельзя записывать каждую команду в инструкцию
каждая инструкция создает отдельный слой -> растет образ
оптимально так
RUN apt-get clean
RUN apt-get update
RUN apt-get install app1 app2 -y
а еще лучше так
RUN apt-get clean && \
apt-get update && \
apt-get install app1 app2 -y
-рекомендуется удалять лишний cache (удалять надо в той же инструкции т.к. иначе он останется в предыдущем слое)
RUN apt-get clean && \
apt-get update && \
apt-get install app1 app2 -y && \
rm -rf /var/lib/apt/lists/*
– часто изменяемые части нужно записывать ниже в dockerfile т.к. docker не будет пересобирать вышерасположенные слои
– для уменьшения числа слоев лучше выполнять копирование файлов в 1 директорию в 1 команду
COPY ./files/file1.txt ./files/file2.txt /opt/…/
-выполнять сборку компилируемых приложений в отдельном образе (это можно сделать в 1м dockerfile)
ARG APP_NAME=”myAPP”
FROM ubuntu:22.04 as builder
COPY ….
//сборка
FROM ubuntu:22.04
COPY –from=builder ./build/${myAPP} ./exec/${myAPP}
CMD [“./exec/${myAPP}”]
Самые маленькие образы – scratch, alpine
scratch особенно удобен для запуска приложения
