Есть сервис на Go (исходники сервиса и хранятся в этом каталоге) и для него даже написан Dockerfile
и docker-compose.yml
, который демонстрирует использование приложения. Разработчики говорят*, что Заказчик требовал в качестве базы Distroless Base Debian11 и они успешно выполнили требование. Вам нужно лишь "немного" доработать 😊 (цитата: "ну у вас же есть там всякие девопсерские заморочки, типа как должно быть красиво" 😈).
Примечание*: разработчикам, конечно же, нужно доверять, но желательно проверить, всё ли там действительно настроено верно.
Разработчик сказал следующее (дословно):
Стандартный проект на Go, сборка описана в
Dockerfile
, рядомdocker-compose.yml
, в котором описано, как запускать проект вместе с СУБДПараметры в приложение передаются через флаги, например:
./app -port=8000 -host=... -dbUrl=...Переделывать с флагов на что-то другое не нужно, пусть остаются флаги, но значения в флаги нужно передавать через переменные окружения, например:
docker run -e APP_PORT=9999 ...Для проверки нужно отправить
POST
обычнымapplication/x-www-form-urlencoded
наhttp://localhost:9000/api/events
следующего вида:action=view&product=k8s&fingerprint=XYZ
В ответ придёт код 200
Что нужно сделать (дословно):
Упаковать всё в Docker так, чтобы можно было все флаги задавать через переменные окружения (при этом делать
ENTRYPOINT
илиCMD
в виде скриптов не нужно, запускаться должен именноapp
)Никаких
entrypoint.sh
и других sh-скриптов писать не нужноПеределывать приложение (редактировать исходный код) тоже не нужно
Никаких тестов, проверок стиля кода, проверок безопасности (в том числе сканирования зависимостей и образов на уязвимости) делать не нужно
Сборку организовать в виде Multi-Stage, взяв за основу существующий
Dockerfile
(нужно внести в него изменения, а не создавать с нуля новый)Статически слинкованный бинарник создавать не нужно
Запускать приложение нужно не от root'а (прописывайте это явно в
Dockerfile
)Выложить всё в виде публичного образа на GHCR (GitHub Container Registry), чтобы мы могли сами затестить и переиспользовать
- Всё должно быть оформлено в виде публичного репозитория на GitHub
- Вся сборка образов должна проходить через GitHub Actions
- Образ должен выкладываться в GitHub Container Registry (GHCR)
К текущему заданию дополнительно предъявляются требования:
- Docker Legacy Build (
DOCKER_BUILDKIT=0 docker build .
) - Multi-Stage