Включить зависимости Go в контейнер Docker с помощью mono repo

#docker #go #golang-migrate

#docker #Вперед #golang-миграция

Вопрос:

У меня есть моно-репозиторий со структурой.

 mono-repo
- serviceA
 - main.go
 - Dockerfile
-serviceB
 - main.go
 - Dockerfile
go.mod
go.sum
  

Файл Dockerfile в ServiceA содержит следующий код.

 FROM golang

ENV GO111MODULE=on

WORKDIR /app

COPY . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

ENTRYPOINT ["/app/serviceA"]
  

Я хочу создать образ Docker и включить зависимости из корня моего mono-repo внутри контейнера, в настоящее время я получаю сообщение об ошибке, в котором говорится, что он не может найти ни один из пакетов зависимостей при запуске

docker build -t ServiceA .

Если я не помещу go.mod внутри ServiceA, я не вижу хорошего способа достичь того, чего я хочу. Размещая go.mod внутри сервиса, я чувствую, что теряю преимущество служб, разделяющих зависимости внутри репозитория.

Ответ №1:

Размещая go.mod внутри сервиса, я чувствую, что теряю преимущество служб, разделяющих зависимости внутри репозитория.

Тем не менее, это подход, который можно увидеть здесь или там, где COPY go.mod . COPY go.sum . ) следует за RUN go mod download .

 #This is the ‘magic’ step that will download all the dependencies that are specified in 
# the go.mod and go.sum file.
# Because of how the layer caching system works in Docker, the  go mod download 
# command will _ only_ be re-run when the go.mod or go.sum file change 
# (or when we add another docker instruction this line)
RUN go mod download
  

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

1. На самом деле это не отвечает на вопрос. Локальные зависимости (ServiceB) не извлекаются через go mod download

2. @RicardoTomasi Какая go команда затем загрузит эти локальные зависимости? go get (с Go 1.16 )?