From 69fd40f06561f08614783dfadf21f15db97a3088 Mon Sep 17 00:00:00 2001 From: damir Date: Sat, 4 Apr 2026 14:36:21 +0000 Subject: [PATCH] Initial commit --- .dockerignore | 7 +++++++ Dockerfile | 36 ++++++++++++++++++++++++++++++++++++ docker-compose.yml | 8 ++++++++ go.mod | 3 +++ main.go | 20 ++++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 go.mod create mode 100644 main.go 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..93a316a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# ЭТАП 1: Сборка +FROM golang:1.21-alpine AS builder + +# Устанавливаем рабочую директорию +WORKDIR /build + +# Копируем файлы зависимостей +COPY go.mod ./ +# Если есть go.sum, раскомментируйте следующую строку +# COPY go.sum ./ + +# Загружаем зависимости +RUN go mod download + +# Копируем исходный код +COPY . . + +# Собираем статически скомпилированный бинарный файл для 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