Узнайте, как использовать Docker для эффективной упаковки и развертывания приложений Go, делая их переносимыми и простыми в управлении.
Docker — самая популярная технология контейнеризации благодаря своей простоте и удобству использования. Docker снимает стресс, связанный с проблемами переносимости при разработке и распространении программного обеспечения. Вы можете развернуть свои контейнеры Docker у большинства поставщиков облачных услуг.
Контейнеризация ваших приложений Go с помощью Docker может помочь вам обеспечить последовательное и надежное развертывание в различных средах. Вы можете развертывать свои приложения Go в различных средах, таких как разработка, подготовка и производство. Контейнеры Docker легкие и занимают меньше места, чем традиционные виртуальные машины. Это может сэкономить деньги на хостинге, а также ускорить развертывание.
Настройка простого веб-сервера в Go
Стандартная библиотека Go содержит пакеты, необходимые для настройки простого веб-сервера.
Сначала импортируйте
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 упрощает управление благодаря автоматизированному и согласованному развертыванию.