Как стать автором
Обновить

Комментарии 10

что-то с переводом автор опоздал на 1.5 года… переводов этой статьи уже куча, в том числе даже у меня в блоге уже как со 2-ого марта 2018 года (в гугле ищется по запросу «Создаём самый маленький и безопасный Docker контейнер для Golang на базе Scratch
»). Тема изъезженная.
Великолепно.
ADD ca-certificates.crt /etc/ssl/certs/

Весь смысл ca-certificates.crt в том чтобы он был актуальный и регулярно обновлялся. А вы его в образ навечно. Не надо так.
так образ надо обновлять.
Не ну а что?)
Подкидывать файл через volume для слабаков, а если добавить cert-bot (например как daemon через s6), то задача создания минимального образа явно будет провалена.
Я тоже так делаю. Раз в год обновить сертификат и выкатить новый образ не проблема.
Все равно регулярные обновления происходят.
Странное решение с копированием корневых сертификатов в репозиторий, зачем это оно все ведь во время сборки можно скопировать из любого другого образа к примеру я делаю вот так вот:

FROM alpine:3.9 as builder

RUN apk update && apk add ca-certificates tzdata

FROM scratch

COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo/

COPY main /
CMD ["/main"]

Я бы добавил, что собирать то тоже можно в докере, используя multi-step build. Будет полезно для CI/CD

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

-a -installsuffix устарело уже как 4 года:
github.com/golang/go/issues/9344#issuecomment-69944514

Вполне достаточно
CGO_ENABLED=0 go build

Или лучше глобально определить CGO_ENABLED=0

Расскажите, ещё, пожалуйста про timezone в контейнерах. Go ищет zoneinfo если использовать time.LoadLocation. Как лучше его в контейнер засунуть?

На github в поиске по запросу golang scratch docker в топе сразу два примера, где данные о timezone добавляются в контейнер.
А все статьи по этой теме, к сожалению, поверхностные: я не видел упоминаний timezone, не всегда предлагается менять пользователя с root на ограниченного, в этой статье (не в вину переводчику, конечно) ещё и про multi-stage builds не сказано ничего.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории