Предыдущая статья:Практика по началу работы с Kubernetes — развертывание и запуск проектов GoПосле релиза некоторые пользователи сети оставили сообщение о том, что образ, продемонстрированный в моей статье, предназначен для упаковки файлов проекта и перехода в образ, поэтому образ будет занимать много места.
Go
После компиляции разработанной программы в бинарный файл ее можно установить без инсталляции.Go
Системная среда в исполнении, если только скомпилированные двоичные файлы непосредственно в зеркало в зеркале могут сэкономить много места. Я дал ответ, в центре внимания статьиKubernetes
Поэтому зеркальный аспект не занимает слишком много места.
Это правда, что зеркала приложений реальных онлайн-проектов, как правило, строятся не так, как в предыдущей статье, потому что требования различных аспектов производственных проектов более строгие. Процесс построения изображения обычно используется в первую очередь.Docker
Контейнер компилирует проект в двоичные файлы, а затем копирует скомпилированные файлы в новый образ контейнера, который обычно содержит толькоLinux
Самые основные файлы, необходимые для работы системы, не обязательно иметьGo
окружающей среды, поэтому он может уменьшить много места. Весь процесс происходит в процессе построения изображения, поэтому можно гарантировать согласованность нескольких сред.Docker
Метод зеркалирования называется многоэтапной сборкой (multi stage build
).
Многоступенчатые сборки17.05
Эта функция доступна только в версии, поэтому вы должны сначала определить, какую функцию вы используете, прежде чем использовать ее.Docker Engine
версия.
Вот как это использоватьDocker
многоэтапное сборочное производствоGo
Зеркало приложения.
Отражено в предыдущей статьеDockerfile
Это выглядит так:
FROM golang:1.14-alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
После того, как мы создадим образ, используя многоэтапную сборку,Dockerfile
станет примерно таким:
FROM golang:alpine AS build
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
###
FROM scratch as final
COPY --from=build /app/myapp .
CMD ["/myapp"]
Go
заявка на проектDockerfile
Обычно примерно так, но детали каждого проекта могут различаться.FROM golang:alpine
базовый образ (который содержит инструменты и библиотеки Go для создания программ), указывающий начальную стадию,AS build
назвать этот этапbuild
.
golang:alpine
указанныйGo
базовое изображениеalpine
Версия,alpine
это небольшой размер, специально разработанный для контейнеровLinux
выпуск. этоDockerfile
используется дважды вFROM
Директива, статья 2FROM scratch
ок, говоритDocker
Начните заново со свежего, совершенно пустого образа контейнера и скопируйте в него программу, скомпилированную с предыдущего этапа. Это то, что мы будем использовать для запускаGo
Образ контейнера приложения.
scratch
зеркальное отображениеDocker
Наименьшее изображение, заданное проектом.Docker
используется дляGo
Распространены многоступенчатые сборки программ с использованиемscratch
Зеркалирование экономит много места, потому что нам на самом деле не нужноGo
инструмент или что-нибудь еще для запуска нашей скомпилированной программы, которая также может бытьGo
Преимущество в эпоху контейнеров.
использоватьscratch
зеркальныйGo
Образ приложения будет иметь проблемы с распознаванием часового пояса во время работы Это также наш недавний проект.Kubernetes
Первая проблема возникла при миграции, но, к счастью, послеGoogle
и посмотретьGo
Загрузка исходного кода часового пояса нашла решение, и я расскажу, как его решить в следующей статье.