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

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

Спасибо за статью, как раз нужно было посмотреть на готовые примеры gRPC.
Не думали разбить docker на builder и executor чтобы в контейнере с работющим сервером не было возможности скомпилировать исходники ?

Честно говоря, не видел, чтобы кто-то так делал. Да и не представляю, как это сделать. Во всех примерах по Go и Docker исходники копируются в контейнер и там компилируются.

Зачем тянуть в прод весь образ golang? Обычная практика собрать бинарник в ci и закинуть его в отдельный контейнер (можно на базе alpine ~ 5мб)

Да, я понимаю. Но, во-первых, это перевод статьи, и там было именно так. Во-вторых, это базовый пример.

Это делается при помощи two stage build, примерно вот так:

# Stage 1: building the binary

FROM tetafro/golang-gcc:latest

RUN mkdir /app

# Installing all dependencies that are required for build
RUN apk add sqlite gawk bash wget curl

# Copying _everything_ to the image
ADD . /app
WORKDIR /app

# Building binaries
RUN go build -o downloader cmd/downloader/main.go
RUN go build -o flibustier_server -tags fts5 flibuserver/server/*.go

# Stage 2: creating the actual production image
FROM alpine:latest # note that using tiny basic alpine image
RUN mkdir /app

ADD download_launcher.sh

# Installing only dependencies needed at runtime
RUN apk add sqlite gawk bash curl

WORKDIR /app

# Copying binaries _from the first image_
COPY --from=0 /app/downloader /app/downloader
COPY --from=0 /app/flibustier_server /app/flibustier_server

EXPOSE 9000

# Entry point
CMD /app/downloader_launcher.sh ; /app/flibustier_server --flibusta_db=/app/flibusta.db --port=90009000

А в сообществе Go не принято в подобных постах в листингах кода указывать путь файла? Уже которую статью читаю за последние недели, как стал писать на Go и постоянно приходится напрягаться чтоб представить полное дерево проекта и где в нём конкретный кусок кода.

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

Публикации

Истории