как ускорить запуск Go приложения в Docker уменьшить размер образа
Рейтинг: 62.7% · 30 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- grigory_go73
- Сообщения: 22
- Зарегистрирован: Пн май 11, 2026 3:02 am
как ускорить запуск Go приложения в Docker уменьшить размер образа
Собираю Go-сервис в Docker, итоговый образ выходит 800MB+, и каждый раз при деплое приходится ждать пока скачается. Коллеги говорят что Go-образы должны быть маленькими, но у меня почему-то нет. Использую FROM golang:1.22 как базовый образ. Как правильно уменьшить размер и ускорить сборку?
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — konstantin_app34
Классическое решение — multi-stage build. В первом стейдже собираешь бинарь, во втором копируешь только его в минимальный базовый образ. Вот рабочий шаблон: FROM golang:1.22-alpine AS builder / WORKDIR /app / COPY go.mod go.sum ./ / RUN go mod download / COPY . . / RUN CGO_ENABLED=0 GOOS=linux go build -ldflags='-w -s' -o server . / FROM scratch / COPY --from=builder /app/server / ENTRYPOINT ["/s…
- konstantin_app34
- Сообщения: 1
- Зарегистрирован: Пт май 22, 2026 11:28 pm
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Классическое решение — multi-stage build. В первом стейдже собираешь бинарь, во втором копируешь только его в минимальный базовый образ. Вот рабочий шаблон: FROM golang:1.22-alpine AS builder / WORKDIR /app / COPY go.mod go.sum ./ / RUN go mod download / COPY . . / RUN CGO_ENABLED=0 GOOS=linux go build -ldflags='-w -s' -o server . / FROM scratch / COPY --from=builder /app/server / ENTRYPOINT ["/server"]. Образ FROM scratch — буквально пустой, итог будет 10-20MB вместо 800.
- yaroslav_spb
- Сообщения: 4
- Зарегистрирован: Пн май 11, 2026 4:08 am
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
Флаги -ldflags='-w -s' важны: -w убирает DWARF debug info, -s убирает symbol table. Вместе дают 30-40% уменьшение размера бинаря. CGO_ENABLED=0 критично для FROM scratch — иначе бинарь динамически слинкован с libc и не запустится в пустом образе.
- dnscache8196
- Сообщения: 32
- Зарегистрирован: Вс май 10, 2026 10:26 pm
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
FROM scratch круто, но неудобно если нужны SSL-сертификаты или timezone data. Тогда лучше FROM alpine:3.19 — образ 5MB, есть /etc/ssl/certs и musl libc. Либо используй gcr.io/distroless/static-debian12 от Google — тоже минимальный, но с сертификатами и без shell (что плюс для безопасности).
- yaroslav_hex13
- Сообщения: 20
- Зарегистрирован: Пн май 11, 2026 8:32 am
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
Для ускорения самой сборки в CI — кешируй слои правильно. Копируй go.mod и go.sum отдельно до COPY . . и запускай go mod download до копирования исходников. Тогда зависимости кешируются в отдельном слое и не перекачиваются при изменении кода. Это самое частое упущение — люди делают COPY . . / RUN go mod download и теряют весь кеш при любом изменении файла.
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
Ещё совет: используй .dockerignore. Без него COPY . . затягивает .git, vendor если есть, тесты, документацию — всё это идёт в build context и раздувает время отправки в демон. Минимальный .dockerignore: .git, .gitignore, *.md, *_test.go, Dockerfile.
Re: как ускорить запуск Go приложения в Docker уменьшить размер образа
Проверить итоговый размер слоёв удобно через docker image inspect или docker history --no-trunc image:tag. Ещё есть утилита dive — визуально показывает что в каждом слое занимает место. Очень помогает найти случайно затянутые тестовые данные или логи сборки.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Поставил все сиды, а loss всё равно гуляет между запусками — кто победил недетерминизм в PyTorch?
17 ответов · 695 просмотров
-
- Как тестировать LLM-приложения на prompt injection — методология и инструменты в 2026
6 ответов · 13 просмотров
-
-
-
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость