Базовый образ заменен на scratch (#20)

Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
github-actions[bot]
2024-10-08 19:32:14 +03:00
committed by GitHub
parent 9fb03ac927
commit c620489b15
2 changed files with 30 additions and 48 deletions

View File

@@ -1,32 +0,0 @@
# Created by https://www.toptal.com/developers/gitignore/api/go
# Edit at https://www.toptal.com/developers/gitignore?templates=go
### Go ###
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
# End of https://www.toptal.com/developers/gitignore/api/go
# Other
docker-compose.yaml
Dockefile
nginx.tmpl

View File

@@ -3,27 +3,41 @@ FROM golang:1.23.2-alpine AS builder
# Устанавливаем рабочую директорию
WORKDIR /build
# Копируем исходный код приложения в контейнер
COPY ./ ./
COPY ./main.go ./
# Сборка приложения
RUN CGO_ENABLED=0 go build main.go
# # Отдельный этап сборки для уменьшения размера образа
# FROM alpine:3.20.3 AS runner
# # Определяем аргумент для имени пользователя
# ARG USERNAME=appuser
# ARG GROUPNAME=appgroup
# # Создаем пользователя и группу
# RUN addgroup -S ${GROUPNAME} && adduser -S ${USERNAME} -G ${GROUPNAME}
# # Устанавливаем рабочую директорию
# WORKDIR /app
# # Копируем скомпилированное приложение из предыдущего этапа
# COPY --from=builder /build/main ./
# # Меняем владельца файлов на нового пользователя
# RUN chown -R ${USERNAME}:${GROUPNAME} /app
# # Запускаем контейнер от имени нового пользователя
# USER ${USERNAME}
# # Запускаем healthcheck, проверяющий доступность веб-сервера на порту 8080
# HEALTHCHECK --interval=5s --timeout=5s --start-period=3s --retries=3 \
# CMD wget --quiet --tries=1 --spider http://localhost:8080/ || exit 1
# # Запускаем приложение при старте контейнера
# CMD ["./main"]
# Отдельный этап сборки для уменьшения размера образа
FROM alpine:3.20.3 AS runner
# Определяем аргумент для имени пользователя
ARG USERNAME=appuser
ARG GROUPNAME=appgroup
# Создаем пользователя и группу
RUN addgroup -S ${GROUPNAME} && adduser -S ${USERNAME} -G ${GROUPNAME}
# Устанавливаем рабочую директорию
WORKDIR /app
FROM scratch
# Создаем пользователя
USER 100
# Копируем скомпилированное приложение из предыдущего этапа
COPY --from=builder /build/main ./
# Меняем владельца файлов на нового пользователя
RUN chown -R ${USERNAME}:${GROUPNAME} /app
# Запускаем контейнер от имени нового пользователя
USER ${USERNAME}
COPY --from=builder --chown=100 /build/main /
# Копируем curl для работы HEALTHCHECK
COPY --from=ghcr.io/tarampampam/curl:8.10.1 /bin/curl /bin/curl
# Запускаем healthcheck, проверяющий доступность веб-сервера на порту 8080
HEALTHCHECK --interval=5s --timeout=5s --start-period=3s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost:8080/ || exit 1
CMD [ "curl", "--fail", "http://127.0.0.1:8080/" ]
# Запускаем приложение при старте контейнера
CMD ["./main"]
CMD ["/main"]