Научете как да използвате Docker за ефективно пакетиране и разгръщане на вашите Go приложения, правейки ги преносими и лесни за управление.

Docker е най-популярната технология за контейнеризиране поради своята простота и лекота на използване. Docker облекчава стреса от проблемите с преносимостта при разработката и разпространението на софтуер. Можете да разположите своите докер контейнери на повечето доставчици на облачни услуги.

Контейнерирането на вашите Go приложения с Docker може да ви помогне да осигурите последователно и надеждно внедряване в различни среди. Можете да внедрявате своите Go приложения в различни среди като разработка, етапно представяне и производство. Docker контейнерите са леки и заемат по-малко място от традиционните виртуални машини. Това може да ви спести пари от разходите за хостинг, а също така може да направи внедряването ви по-бързо.

Настройване на прост уеб сървър в Go

Стандартната библиотека на Go съдържа пакетите, от които се нуждаете, за да настроите прост уеб сървър.

instagram viewer

Първо импортирайте http, дневник, и json пакети. Ще използвате http пакет на Go за настройка на сървъра и ВЗЕМЕТЕ заявка крайна точка. The дневник пакет за регистриране на възможни грешки във вашата конзола. The json пакет за кодиране на структура в JSON за крайната точка на API.

импортиране (
"кодиране/json"
"дневник"
"net/http"
)

Можете да кодирате екземпляр на структура като JSON към клиента като отговор въз основа на валидността на заявката, както следва:

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

Функцията манипулатор ще върне успешно съобщение на клиента, ако заявката до крайната точка е a ВЗЕМЕТЕ искане.

// dockerTestEndpoint обработва крайната точка на API за тестване на свързаността на Docker
функdockerTestEndpoint(автор http. ResponseWriter, заявка *http. Заявка) {

// Задаване на заглавката на отговора, за да посочи JSON съдържание
писател. Header().Set("Тип съдържание,""приложение/json")

// Ако методът на заявката е GET
ако искане. Метод == "ВЗЕМИ" {

// Задайте кода на състоянието на отговора на 200 OK
писател. WriteHeader (http. Състояние ОК)

// Създаване на структура на съобщение за успешен отговор
съобщение := Съобщение{
отговор: "Успешен",
Описание: „Успешно достигнахте крайната точка на API“ +
„От вашия Docker контейнер“,
}
// Кодирайте съобщението като JSON и го изпратете като отговор
грешка := json. NewEncoder (писец).Encode(&message)
ако грешка!= нула {
връщане
}
} друго {

// Ако методът на заявката не е GET
// Задайте кода на състоянието на отговора на 400 лоша заявка
писател. WriteHeader (http. StatusBadRequest)

// Създаване на структура на съобщение за лош отговор на заявка
съобщение := Съобщение{
отговор: "Неправилна заявка",
Описание: „Успешно достигнахте крайната точка на API от вашия „ +
„Докер контейнер, но направихте лоша заявка“,
}

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

Настройвате функцията за обработка в основната функция с маршрута като /api/docker/go. The dockerTestEndpoint функцията на манипулатора потвърждава, че заявката към манипулатора е GET заявка. Ако това е GET заявка, тя кодира инстанциран Съобщение struct екземпляр на клиента въз основа на състоянието на заявката.

Ето как можете да монтирате функцията за обработка на маршрут и да настроите сървъра да работи на порт 8080:

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

// Стартирайте HTTP сървъра и слушайте за входящи заявки на порт 8080.
грешка := http. ListenAndServe(":8080", нула)
ако грешка!= нула {
дневник. Fatalln(„Има грешка със сървъра:“, грешка)
}
}

The основен функцията е входна точка на сървъра, която слуша на порт 8080. The HandleFunc метод монтира маршрутите на функцията манипулатор. The ListenAndServe метод стартира сървъра на посочения локален хост порт 8080.

Първи стъпки Контейнериране на вашите Go приложения с Docker

След като инсталирате и настроите Docker, ще ви трябва Docker файл с име Dockerfile, за да създадете и изградите Docker изображение за вашето приложение Go. Ще посочите команди за базовото изображение и команди за копиране на файловете, добавяне на работната директория и стартиране на приложението в Dockerfile.

Изпълнете тази команда в терминала на вашето работно пространство, за да създадете Dockerfile.

докоснете Dockerfile

Ще посочите командите за изграждане на вашия Docker образ в Dockerfile.

Ако има файлове, които искате да отделите от вашето Docker изображение, можете да използвате a .dockerignore файл. The .dockerignore файловете работят точно както .gitignore файлове.

докоснете .dockerignore

След това ще зададете команди за изграждане във вашия Dockerfile, за да контейнеризирате вашите приложения.

Дефиниране на команди в Docker файла

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

Ето пример за съдържанието на Dockerfile, който изгражда уеб сървъра по-горе:

# Използвайте основно изображение на Golang
ОТ golang: най-новото

# Задайте работната директория вътре в контейнера
WORKDIR /app

# Копира всички файлове в локалната директория в работната директория в контейнера
КОПИЕ. .

# Изтеглете зависимостите на модула Go
БЯГАЙТЕ go mod изтегляне

# Създайте приложението Go
БЯГАЙТЕ отидете на build -o приложение

# Задайте входна точка за приложението
ВХОДНА ТОЧКА ["./приложение"]

Dockerfile използва golang: най-новото основно изображение, за да изградите приложението, след като зададете работната директория /app.

Dockerfile копира файловете с КОПИЕ команда и изтегляния на зависимости с БЯГАЙТЕ команда.

Файлът указва операция за изграждане и изпълнение с БЯГАЙТЕ команда, след което задава командата да се изпълнява, когато контейнерът започне с CMD команда.

Запазете файла Docker в същата директория като вашата go.mod и main.go файлове; след това изпълнете тази команда, за да създадете Docker изображение от този Dockerfile:

docker build -t GolangTutorial.

Горната команда ще създаде Docker изображение с етикета golangtutorial. Можете да стартирате контейнер с тази команда:

docker run -p 8080:8080 golangурок

Командата картографира порт 8080 от контейнера към порт 8080 на локалния хост на хост машината. Можете да заявите сървъра, работещ в контейнера на Docker, от хост машината.

Ето резултата от изпращане на CURL заявката до сървъра, този път работещ на Docker:

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

Docker Compose е инструмент, който можете да използвате за оркестриране (работа с много) Docker контейнери. Docker Compose ви позволява да дефинирате многоконтейнерно приложение в един YAML файл. Можете да стартирате и управлявате цялото приложение с една команда.

Можете да използвате Docker Compose за внедряване и управление на сложни контейнерни приложения. Docker Compose опростява управлението с автоматизирани и последователни внедрявания.