mirror of
https://github.com/batonogov/learn-devops.git
synced 2025-11-29 00:33:02 +00:00
Базовый образ заменен на scratch (#20)
Co-authored-by: Fedor Batonogov <f.batonogov@yandex.ru>
This commit is contained in:
committed by
GitHub
parent
9fb03ac927
commit
c620489b15
@@ -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
|
|
||||||
@@ -3,27 +3,41 @@ FROM golang:1.23.2-alpine AS builder
|
|||||||
# Устанавливаем рабочую директорию
|
# Устанавливаем рабочую директорию
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
# Копируем исходный код приложения в контейнер
|
# Копируем исходный код приложения в контейнер
|
||||||
COPY ./ ./
|
COPY ./main.go ./
|
||||||
# Сборка приложения
|
# Сборка приложения
|
||||||
RUN CGO_ENABLED=0 go build 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
|
FROM scratch
|
||||||
# Определяем аргумент для имени пользователя
|
# Создаем пользователя
|
||||||
ARG USERNAME=appuser
|
USER 100
|
||||||
ARG GROUPNAME=appgroup
|
|
||||||
# Создаем пользователя и группу
|
|
||||||
RUN addgroup -S ${GROUPNAME} && adduser -S ${USERNAME} -G ${GROUPNAME}
|
|
||||||
# Устанавливаем рабочую директорию
|
|
||||||
WORKDIR /app
|
|
||||||
# Копируем скомпилированное приложение из предыдущего этапа
|
# Копируем скомпилированное приложение из предыдущего этапа
|
||||||
COPY --from=builder /build/main ./
|
COPY --from=builder --chown=100 /build/main /
|
||||||
# Меняем владельца файлов на нового пользователя
|
# Копируем curl для работы HEALTHCHECK
|
||||||
RUN chown -R ${USERNAME}:${GROUPNAME} /app
|
COPY --from=ghcr.io/tarampampam/curl:8.10.1 /bin/curl /bin/curl
|
||||||
# Запускаем контейнер от имени нового пользователя
|
|
||||||
USER ${USERNAME}
|
|
||||||
# Запускаем healthcheck, проверяющий доступность веб-сервера на порту 8080
|
# Запускаем healthcheck, проверяющий доступность веб-сервера на порту 8080
|
||||||
HEALTHCHECK --interval=5s --timeout=5s --start-period=3s --retries=3 \
|
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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user