Есть микро-сервис на Go (исходники сервиса и хранятся в этом каталоге). Необходимо упаковать в Docker-образ, используя в качестве базы Scratch (ведь все мы знаем, что Scratch – это круто и Go "просто создан для него" 😈).
Разработчик сказал следующее* (дословно):
Стандартный проект на Go, собираем командой
go build -o app.bin cmd/main.go
, сейчас сборка описана вDockerfile
Умеет загружать файлы (HTTP Multipart в поле
file
), отправленные наhttp://localhost:9000/upload
, кладёт их в каталог./upload
В ответ придёт код 200
Примечание*: помните, что к сожалению, не всё, что говорят разработчики, является достоверным
Что нужно сделать (дословно):
Упаковать всё в Docker, указать, что
/upload
нужно подключать какVOLUME
(за основу взять исходныйDockerfile
)Никаких
entrypoint.sh
и других sh-скриптов писать не нужноПеределывать приложение (редактировать исходный код) тоже не нужно
Никаких тестов, проверок стиля кода, проверок безопасности (в том числе сканирования зависимостей и образов на уязвимости) делать не нужно
Сборку при необходимости организовать в виде Multi-Stage
Запускать приложение нужно не от root'а (прописывайте это явно в
Dockerfile
)Выложить всё в виде публичного образа на GHCR (GitHub Container Registry), чтобы мы могли сами затестить и переиспользовать
- Всё должно быть оформлено в виде публичного репозитория на GitHub
- Вся сборка образов должна проходить через GitHub Actions
- Образ должен выкладываться в GitHub Container Registry (GHCR)
К текущему заданию дополнительно предъявляются требования:
- Docker Legacy Build (
DOCKER_BUILDKIT=0 docker build .
) - Multi-Stage