From c620489b15dc05453b38ae763e2c0c4d2009844f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:32:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BD=D0=B0=20scratch=20(#20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fedor Batonogov --- docker/.dockerignore | 32 ------------------------------ docker/Dockerfile | 46 +++++++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 48 deletions(-) delete mode 100644 docker/.dockerignore diff --git a/docker/.dockerignore b/docker/.dockerignore deleted file mode 100644 index d880757..0000000 --- a/docker/.dockerignore +++ /dev/null @@ -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 diff --git a/docker/Dockerfile b/docker/Dockerfile index 4f77de6..0684ef6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -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"]