Немного из best practice при создании docker образов, кратко без воды.
1. Образ основа — минимальный (Alpine).
2. Минимальное количество слоев, используй RUN &&.
3. Установка пакетов в алфавитном порядке.
4. Очистить кэши ВСЕ! (пример apt — && rm -rf /var/lib/apt/lists/*).
5. .dockerignore — все лишнее добавляем сюда, оно не попадет в образ.
6. Часто изменяемые слои нужно ставить в конец (COPY код и конфиги в конец).
7. Не используем latest, везде указываем определенную версию.
8. Multistage.
9. Один контейнер 1 процесс.
10. Ограничение ресурсов для контейнеров.
Entrypoint & CMD
По факту одно и тоже, но разработчики советуют:
Entrypoint — само приложение
CMD — флаги к ниму