логотип PurpleSchool
логотип PurpleSchool

Golang в Docker - Практическое руководство

Автор

Олег Марков

Введение

В последние годы контейнеризация стала неотъемлемой частью разработки программного обеспечения, и одним из самых популярных инструментов для этого является Docker. В то же время язык программирования Go от Google, также известный как Golang, приобретает все большее значение благодаря своей скорости, простоте и эффективности. В этом руководстве мы рассмотрим, как можно использовать Golang вместе с Docker для создания и развертывания контейнеризованных приложений.

Представьте: вам нужно развернуть приложение на нескольких серверах или, возможно, вы работаете в больших командах, где нужно обеспечить консистентность в разработке и развертывании. Docker и Go в тандеме предоставляют стабильное, прогнозируемое и быстрое решение для этих задач.

Установка Docker и Go

Установка Golang

Прежде чем приступить к работе с Golang и Docker, вам нужно установить Go на ваш компьютер. На сайте официальной документации Golang можно найти подробные инструкции по установке для разных операционных систем. Проверьте, что установка прошла успешно, набрав в консоли:

go version

Установка Docker

Docker также предоставляет инструкции по установке на различных платформах. После установки Docker убедитесь, что он работает, используя команду:

docker --version

Убедитесь, что у вас установлены все необходимые компоненты, такие как Docker Compose, для полного использования возможностей Docker.

Основы работы с Docker

Dockerfile для Golang

Dockerfile – это текстовый документ, содержащий все команды, которые пользователь может вызвать по отдельности для сборки образа. Создание Dockerfile является первым шагом к созданию контейнеризированного приложения на Go. Давайте разберем его на простом примере.

# Базовый образ с установленным Go
FROM golang:1.17

# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app

# Копируем все файлы нашего приложения в рабочую директорию
COPY . .

# Сборка приложения
RUN go build -o main .

# Определяем команду для выполнения при запуске контейнера
CMD ["./main"]

Разбор Dockerfile

  • FROM: Указывает базовый образ, на котором будет строиться наше приложение. В данном случае это официальный образ Golang версии 1.17.

  • WORKDIR: Устанавливает рабочую директорию внутри контейнера. Все последующие команды будут выполняться в этой директории.

  • COPY: Копирует файлы вашего приложения в контейнер.

  • RUN: Выполняет команду во время сборки изображения Docker. Здесь мы компилируем наше Go-приложение.

  • CMD: Указывает, какая команда должна выполняться при запуске контейнера.

Сборка Docker-образа

После создания Dockerfile можно приступить к сборке Docker-образа. Находясь в той же директории, что и Dockerfile, выполните следующую команду:

docker build -t my-golang-app .

Обратите внимание, как команда присваивает имя my-golang-app вашему Docker-образу. Символ . в конце указывает Docker использовать текущую директорию для поиска Dockerfile и всех необходимых файлов.

Запуск контейнера

Теперь, когда у вас есть Docker-образ, вы можете запустить контейнер:

docker run -d -p 8080:8080 my-golang-app
  • -d: Запускает контейнер в фоновом режиме.

  • -p 8080:8080: Пробрасывает порт 8080 на вашем локальном компьютере в порт 8080 контейнера.

Теперь ваше приложение на Go работает внутри контейнера и доступно на localhost:8080.

Практические рекомендации

Оптимизация Dockerfile

Чтобы уменьшить размер Docker-образа и ускорить сборку, вы можете оптимизировать Dockerfile. Например, используйте многоступенчатую сборку:

# Этап 1: сборка
FROM golang:1.17 AS builder

WORKDIR /app

COPY . .

RUN go build -o main .

# Этап 2: запуск
FROM alpine:latest

WORKDIR /root/

COPY --from=builder /app/main .

CMD ["./main"]

Здесь сборка приложения происходит в образе Golang, а затем скомпилированный бинарный файл переносится в более легкий образ Alpine.

Заключение

Использование Golang и Docker вместе позволяет создавать эффективные и легко развертываемые приложения. Docker упрощает управление зависимостями и обеспечивает среду, идеально подходящую для разработки, тестирования и деплоя. Надеюсь, это руководство помогло вам понять, как использовать Golang в Docker и вдохновило на эксперименты с контейнерами в ваших проектах. Вы можете продолжить изучение этой темы, пробуя более сложные сценарии и интеграции с другими технологиями.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile