Комментарии 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 и постоянно приходится напрягаться чтоб представить полное дерево проекта и где в нём конкретный кусок кода.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как создать простой микросервис на Golang и gRPC и выполнить его контейнеризацию с помощью Docker