В этой статье мы рассмотрим пример простого HTTP-сервера, написанного на языке программирования Golang, который предоставляет информацию о контейнерах Docker. Мы рассмотрим код и объясним его основные части, а также покажем, как его использовать для мониторинга контейнеров на вашем хосте.
Для начала давайте рассмотрим код:
// Импортируем необходимые пакеты
package main
import (
"context"
"encoding/json"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"net/http"
)
// Создаем структуру ContainerInfo для хранения информации о контейнерах
type ContainerInfo struct {
ID string `json:"id"`
Image string `json:"image"`
}
// Функция listContainers обрабатывает запросы к серверу и возвращает информацию о контейнерах
func listContainers(w http.ResponseWriter, r *http.Request) {
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
containersList := make([]ContainerInfo, len(containers))
for i, container := range containers {
containersList[i] = ContainerInfo{
ID: container.ID[:10],
Image: container.Image,
}
}
response, err := json.Marshal(containersList)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, err = w.Write(response)
if err != nil {
return
}
}
// Функция main - точка входа в приложение
func main() {
http.HandleFunc("/containers", listContainers)
port := ":3600"
fmt.Printf("Сервер слушает на порту %s\n", port)
if err := http.ListenAndServe(port, nil); err != nil {
panic(err)
}
}
Теперь рассмотрим основные моменты:
Мы используем язык программирования Golang для создания HTTP-сервера.
Мы используем библиотеку Docker Go для взаимодействия с Docker API.
Мы определяем структуру
ContainerInfo
для хранения информации о контейнерах.Функция
listContainers
обрабатывает HTTP-запросы, создает клиент Docker и запрашивает список контейнеров.Мы преобразуем полученные данные в формат JSON и отправляем ответ клиенту
Чтобы запустить этот сервер, вам нужно выполнить следующие шаги:
Убедитесь, что у вас установлен Docker и Golang.
Скопируйте код в файл с расширением
.go
.Запустите сервер, выполнив
go run ваш-файл.go
.
После запуска сервер будет доступен по адресу http://localhost:3600/containers
, и он вернет информацию о контейнерах в формате JSON.
Этот пример представляет собой простую реализацию сервера мониторинга контейнеров Docker, и вы можете его расширить и настроить под свои потребности.