commit ff1978ecf99fdf6c2c6e8a84baadf08a17b28e01 Author: damir Date: Sat Apr 4 17:38:33 2026 +0000 Initial commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..67b695a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.gitignore +node_modules +dist +*.log +Dockerfile +.dockerignore \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7123f30 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +# ЭТАП 1: Сборка +FROM golang:1.21-alpine AS builder + +# Устанавливаем рабочую директорию +WORKDIR /build + +# Копируем только go.mod (если go.sum нет, это не страшно) +COPY go.mod ./ +# Если go.sum существует локально, он подхватится, если нет — пропустится +COPY go.sum* ./ + +# Копируем исходный код +COPY . . + +# ВЫПОЛНЯЕМ TIDY ПЕРЕД СБОРКОЙ +# Это создаст/обновит go.sum внутри контейнера +RUN go mod tidy + +# Собираем статически скомпилированный бинарный файл для Linux +RUN CGO_ENABLED=0 GOOS=linux go build -o /app-binary main.go + +# ЭТАП 2: Финальный образ +FROM alpine:latest + +# Добавляем сертификаты (нужны для HTTPS запросов) и временную зону +RUN apk --no-cache add ca-certificates tzdata + +WORKDIR /root/ + +# Копируем только собранный бинарник из первого этапа +COPY --from=builder /app-binary . + +# Открываем порт +EXPOSE 8080 + +# Запускаем приложение +CMD ["./app-binary"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a97edef --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3.8' + +services: + app: + build: . + ports: + - "9000:8080" + restart: unless-stopped \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5de72d8 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module go-app + +go 1.21 \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..593ba19 --- /dev/null +++ b/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + "net/http" + "time" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello from Dockerized Go App!") + }) + + http.HandleFunc("/time", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Current time: %s", time.Now().Format(time.RFC1123)) + }) + + fmt.Println("Server starting on :8080...") + http.ListenAndServe(":8080", nil) +} \ No newline at end of file