Создание простого HTTP-сервера для мониторинга контейнеров Docker на Golang

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В этой статье мы рассмотрим пример простого 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)
	}
}

Теперь рассмотрим основные моменты:

  1. Мы используем язык программирования Golang для создания HTTP-сервера.

  2. Мы используем библиотеку Docker Go для взаимодействия с Docker API.

  3. Мы определяем структуру ContainerInfo для хранения информации о контейнерах.

  4. Функция listContainers обрабатывает HTTP-запросы, создает клиент Docker и запрашивает список контейнеров.

  5. Мы преобразуем полученные данные в формат JSON и отправляем ответ клиенту

Чтобы запустить этот сервер, вам нужно выполнить следующие шаги:

  1. Убедитесь, что у вас установлен Docker и Golang.

  2. Скопируйте код в файл с расширением .go.

  3. Запустите сервер, выполнив go run ваш-файл.go.

После запуска сервер будет доступен по адресу http://localhost:3600/containers, и он вернет информацию о контейнерах в формате JSON.

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

Источник: https://habr.com/ru/articles/764756/


Интересные статьи

Интересные статьи

Что такое react-контекст?React Context API - это интерфейс, который позволяет сохранять некоторую величину (переменную или объект), и использовать ее между несколькими компонентами. Под самим же конте...
Привет, Хабр!К 2022 году о контейнеризации не слышал только ленивый. Большинство специалистов, так или иначе имеющих отношение к ИТ, хотя бы раз в жизни запускали программное обеспечение в контейнерах...
Добрый день, думаю у каждого найдутся люди которые  на сообщение с просьбой писать текстом отвечают   голосовыми. В очередной раз получив голосовые я начал думать как же все-таки решить...
Приветствую! Если вы зашли на эту статью, значит скорее всего вам крайне неохота лезть в официальную документацию (а очень зря. Она и написана подробно, и имеет перевод на русский язык) и...
Это туториал по созданию интерактивного прилодения для решения задачи о ходе коня на языках processing и p5.js. Посмотреть саму программу можно здесь. Для управления «конём» используется метод...