Включая pkg в файл.dockerignore

Прямо сейчас мой файл.dockerignore имеет следующее содержимое:

.vscode
.idea
.git
bin
pkg

и мой Dockerfile выглядит так:

FROM golang:latest
RUN mkdir -p /app
WORKDIR /app
COPY . .
ENV GOPATH /app
RUN go install huru
EXPOSE 3000
ENTRYPOINT /app/bin/huru

У меня вопрос - я должен копировать папку pkg с хоста на изображение или нет? Прямо сейчас я не так, как ясно показывает мой файл dockerignore.

У меня такое ощущение, что мне нужно просто скопировать папку pkg с хоста на образ, потому что в ней могут быть встроенные файлы, которые go install можно использовать вместо повторной загрузки исходного кода с GitHub и т. д.?

1 ответ

Лично я думаю, копирование pkg папка с хоста на изображение не очень хорошая идея, потому что:

  • он тесно связывает место, из которого вы строите образ (ваш хост) и само изображение. Возможно, у вас могут быть различия в результирующих изображениях в зависимости от того, где вы создаете изображение, и это, вероятно, то, что вы не хотите
  • Более того, если у вас есть автоматические сборки (например, из CI), вы, вероятно, каждый раз перестраиваете целое приложение из чистой среды, так что нет никакой начальной pkg папка для копирования.

Если вы знакомы с миром Java, я уже сталкивался с этой проблемой для изображений, созданных с помощью Maven. Чтобы ускорить сборку, некоторые люди копируют свой локальный репозиторий Maven (~/.m2) на изображении, чтобы избежать повторной загрузки артефактов. Я не особенно согласен с этим, так как всегда есть риск, что их .m2 Папка содержит поврежденные артефакты: следовательно, образ, созданный на их компьютере, будет отличаться от того, если бы он был построен в чистой среде. Это зависит от того, хотите ли вы иметь последовательные сборки или быстрые сборки (я предпочитаю первую).

В заключение, я думаю, что создание образов из чистой среды, вне зависимости от того, где находится образ, является хорошей практикой. Вот почему я лично не копировал бы никакие файлы (кроме исходного кода приложения!) Внутри изображения.

Другие вопросы по тегам