Включая pkg в файл .dockerignore - PullRequest
0 голосов
/ 04 ноября 2018

Прямо сейчас мой файл .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 Ответ

0 голосов
/ 04 ноября 2018

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

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

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

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

...