Узнайте, как использовать Docker для эффективной упаковки и развертывания приложений Go, делая их переносимыми и простыми в управлении.

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

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

Настройка простого веб-сервера в Go

Стандартная библиотека Go содержит пакеты, необходимые для настройки простого веб-сервера.

Сначала импортируйте

instagram viewer
http, бревно, и json пакеты. Вы будете использовать HTTP-пакет Go настроить сервер и ПОЛУЧАТЬ конечная точка запроса. бревно package для регистрации возможных ошибок на вашей консоли. пакет json для кодирования структуры в JSON для конечной точки API.

Импортировать (
"кодировка/json"
"бревно"
"сеть/http"
)

Вы можете закодировать экземпляр структуры как JSON для клиента в качестве ответа на основе достоверности запроса следующим образом:

тип Сообщение структура {
Ответ нить`json:"ответ"`
Описание нить`json:"описание"`
}

Функция обработчика вернет клиенту сообщение об успешном завершении, если запрос к конечной точке является ПОЛУЧАТЬ запрос.

// dockerTestEndpoint обрабатывает конечную точку API для тестирования подключения к Docker
функцияdockerTestEndpoint(писатель http. ResponseWriter, запрос *http. Запрос) {

// Установите заголовок ответа, чтобы указать содержимое JSON
писатель. Заголовок (). Установить ("Тип содержимого,""приложение/json")

// Если метод запроса GET
если запрос. Метод == "ПОЛУЧАТЬ" {

// Установить код статуса ответа на 200 OK
писатель. Заголовок записи (http. СтатусОК)

// Создаем структуру сообщения для успешного ответа
сообщение := Сообщение{
Ответ: "Успешный",
Описание: "Вы успешно попали в конечную точку API" +
«Из вашего контейнера Docker»,
}
// Кодируем сообщение как JSON и отправляем его как ответ
ошибка := json. NewEncoder (запись).Encode(&сообщение)
если ошибся != ноль {
возвращаться
}
} еще {

// Если метод запроса не GET
// Установите код состояния ответа на 400 Bad Request
писатель. Заголовок записи (http. СтатусBadRequest)

// Создаем структуру сообщения для неверного ответа на запрос
сообщение := Сообщение{
Ответ: «Неверный запрос»,
Описание: "Вы успешно попали в конечную точку API из вашего " +
«Контейнер Docker, но вы сделали неправильный запрос»,
}

// Кодируем сообщение как JSON и отправляем его как ответ
ошибка := json. NewEncoder (запись).Encode(&сообщение)
если ошибся != ноль {
возвращаться
}
}
}

Вы настраиваете функцию обработчика в основной функции с маршрутом как /api/docker/go. dockerTestEndpoint Функция обработчика проверяет, что запрос к обработчику является запросом GET. Если это запрос GET, он кодирует экземпляр Сообщение экземпляр структуры клиенту в зависимости от статуса запроса.

Вот как вы можете смонтировать функцию обработчика на маршруте и настроить сервер для работы на порту. 8080:

функцияосновной() {
// Регистрируем функцию-обработчик 'dockerTestEndpoint'
// для обработки запросов на URL "/api/docker/go".
http. Функция HandleFunc("/API/докер/перейти", dockerTestEndpoint)

// Запускаем HTTP-сервер и прослушиваем входящие запросы на порт 8080.
ошибка := http. слушать и обслуживать(":8080", ноль)
если ошибся != ноль {
бревно. Fatalln("Произошла ошибка сервера:", ошибся)
}
}

основной функция — это точка входа сервера, которая прослушивает порт 8080. HandleFunc Метод монтирует маршруты в функцию-обработчик. слушать и обслуживать метод запускает сервер на указанном локальном порту хоста 8080.

Начало работы с контейнерами приложений Go с помощью Docker

После установки и настройки Docker вам понадобится файл Docker с именем Dockerfile, чтобы создать образ Docker для вашего приложения Go. Вы укажете команды для базового образа и команды для копирования файлов, добавления рабочего каталога и запуска приложения в Dockerfile.

Запустите эту команду в терминале вашей рабочей области, чтобы создать Dockerfile.

коснуться Dockerfile

Вы укажете команды для создания образа Docker в файле Dockerfile.

Если есть какие-либо файлы, которые вы хотите отделить от своего образа Docker, вы можете использовать .dockerignore файл. .dockerignore файлы работают точно так же .gitignore файлы.

коснитесь .dockerignore

Далее вы укажете команды сборки в своем Dockerfile для контейнеризации ваших приложений.

Определение команд в Dockerfile

Файлы Docker можно настроить в соответствии со спецификациями вашего проекта. Вы определите команды для создания базового образа для создания приложения.

Вот пример содержимого файла Dockerfile, который создает указанный выше веб-сервер:

# Использовать базовый образ Golang
ОТ Голанг: последний

# Установить рабочий каталог внутри контейнера
РАБОЧИЙКАТАЛОГ /app

# Копирует все файлы из локального каталога в рабочий каталог в контейнере
КОПИРОВАТЬ. .

# Загрузите зависимости модуля Go
БЕГАТЬ скачай мод

# Соберите приложение Go
БЕГАТЬ пойти построить -o приложение

# Установить точку входа для приложения
ВХОДНАЯ ТОЧКА ["./приложение"]

Dockerfile использует Голанг: последний базовый образ для сборки приложения после установки рабочего каталога в /app.

Dockerfile копирует файлы с КОПИРОВАТЬ команда и загружает зависимости с БЕГАТЬ команда.

Файл определяет операцию сборки и запуска с БЕГАТЬ команда, а затем устанавливает команду для запуска при запуске контейнера с CMD команда.

Сохраните Dockerfile в том же каталоге, что и ваш go.mod и main.go файлы; затем запустите эту команду, чтобы создать образ Docker из этого Dockerfile:

docker build -t GolangTutorial .

Приведенная выше команда создаст образ Docker с тегом руководство. Вы можете запустить контейнер с помощью этой команды:

docker run -p 8080:8080 golangtutorial

Команда сопоставляет порт 8080 из контейнера с портом 8080 на локальном хосте хост-компьютера. Вы можете запросить сервер, работающий в контейнере Docker, с хост-компьютера.

Вот результат от отправка запроса CURL на сервер, на этот раз работающий в Docker:

Вы можете использовать Docker Compose для оркестрации контейнеров

Docker Compose — это инструмент, который можно использовать для организации (работы со многими) контейнерами Docker. Docker Compose позволяет определить многоконтейнерное приложение в одном файле YAML. Вы можете запускать и управлять всем приложением с помощью одной команды.

Вы можете использовать Docker Compose для развертывания сложных контейнерных приложений и управления ими. Docker Compose упрощает управление благодаря автоматизированному и согласованному развертыванию.