Docker многоступенчатая сборка для golang создать большое изображение - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу использовать многоэтапную сборку для моего проекта gaoling, когда я собираю проект локально для linux / windows / Mac, я получил 12,6 МБ размера , в настоящее время у меня небольшая программа CLA для gaoling.

Теперь я хочу собрать его, чтобы создать из него образ докера lightwhigt с опцией scratch и построить as

. Я использую следующее, но когда я проверяю изображение, явидите, что это размер 366MB, есть идеи, что мне здесь не хватает?Это должно быть меньше, чем 20 МБ ...

#build stage
FROM golang:alpine as builder
WORKDIR /go/src/tzf
ADD . /go/src/tzf
RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf
RUN apk add --no-cache git



FROM golang:alpine 
RUN mkdir /build
ADD . /build/
WORKDIR /build
RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf
FROM scratch
COPY --from=builder /build/main /app/
WORKDIR /app
CMD [“./ova -v"]

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Когда вы создаете свое окончательное изображение, будьте осторожны, копируя только те файлы, которые вы хотите получить на изображении.Здесь имеет смысл сделать ваш двоичный файл ТОЧКОЙ ВВОДА изображения, поскольку с ним буквально больше ничего нельзя сделать.

Я мог бы создать двухэтапный конвейер, например:

# size of this stage doesn't matter; use the standard image
FROM golang AS builder
WORKDIR /go/src/tzf
ADD . ./
RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o /ova tzf

FROM scratch
# only copy the one file, may as well put it in /
COPY --from=builder /ova /ova
ENTRYPOINT ["/ova"]
# if you want to launch it with default options, you can
# CMD ["-v"]
0 голосов
/ 16 сентября 2018

Вы должны использовать сначала контейнер golang:alpine для сборки приложения, затем alpine для запуска скомпилированного приложения.

Примерно так:

# builder
FROM golang:alpine AS builder
WORKDIR /go/src/tzf
ADD . /go/src/tzf
RUN CGO_ENABLED=0 go build -ldflags '-extldflags "-static"' -o ova tzf

# runner
FROM alpine
WORKDIR /app
COPY --from=builder /build/main /app/
CMD [“./ova -v"]

должен привести к небольшому размеру контейнера.

...