- runtimes/go1.23/server.go: HTTP-wrapper + job-runner (SLESS_MODE=job) - runtimes/go1.23/go.mod: module sless/fn (изолирует от корневого go.mod) - runtimes/go1.23/Dockerfile: multi-stage build (golang:1.23-alpine → alpine:3.20) - internal/builder/context.go: go1.23 в runtimeBaseImage + generateDockerfile - controllers/functionjob_controller.go: go1.23 runner (nil cmd + SLESS_MODE=job env) - api/v1alpha1/function_types.go: enum go1.21 → go1.23 - config/crd/bases/...: CRD обновлён - terraform/provider: OneOf обновлён - examples/hello-go: HTTP + job примеры на go1.23 - deployments/k8s/operator.yaml: v0.1.25
34 lines
1.4 KiB
Docker
34 lines
1.4 KiB
Docker
# Создано: 2026-03-11
|
||
# Base builder image для Go 1.23 serverless функций.
|
||
# Это BUILDER-образ (не runtime): содержит Go компилятор + server.go.
|
||
# server.go — HTTP-wrapper + job-runner, компилируется ВМЕСТЕ с кодом пользователя.
|
||
#
|
||
# kaniko делает multi-stage build:
|
||
# Stage 1: golang:1.23-alpine → COPY server.go + handler/ → go build → /server
|
||
# Stage 2: FROM alpine → COPY /server → минимальный финальный образ.
|
||
#
|
||
# Почему builder-образ, а не runtime: Go требует статической компиляции — нельзя
|
||
# "подключить" пользовательский код динамически как в Python/Node.
|
||
|
||
FROM golang:1.23-alpine AS builder
|
||
|
||
WORKDIR /app
|
||
|
||
# server.go — точка входа (main package), вызывает Handler() из пользовательского кода.
|
||
COPY server.go /app/server.go
|
||
|
||
# Код пользователя kaniko копирует в /app/handler/
|
||
COPY handler/ /app/handler/
|
||
|
||
# Статическая сборка (без libc) — работает в alpine-контейнере
|
||
RUN CGO_ENABLED=0 go build -o /server /app/server.go
|
||
|
||
# Финальный минимальный образ
|
||
FROM alpine:3.20
|
||
|
||
COPY --from=builder /server /server
|
||
|
||
EXPOSE 8080
|
||
|
||
CMD ["/server"]
|