Руководство Golang по запуску веб-сервера с помощью Docker

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

Ещё одно напоминание о том, над чем мы будем работать в рамках нашего проекта, — это NGINX . NGINX — это просто веб-сервер, который также может использоваться для других целей, таких как обратный прокси-сервер, потоковая передача мультимедиа и балансировка нагрузки, и это лишь некоторые из них. Кроме того, NGINX можно использовать в качестве прокси-сервера IMAP/POP3. Интересным фактом о NGINX является то, что он имеет открытый исходный код и наряду с Apache является популярным HTTP-клиентом в Интернете.

Легенда: нашей команде нужно, чтобы мы разместили веб-сайт с использованием Nginx, и мы хотим использовать Docker для простого управления развёртыванием и масштабированием нашего приложения. Мы также хотим использовать Golang для создания приложения, которое будет размещено на сервере Nginx. Наша цель — создать контейнер Docker, запускающий сервер Nginx, который будет обслуживать наше веб-приложение Golang по всему миру.

@DevOPSitsec – наш канал для DevOPs инжинеров.

Что нам понадобится:

Знание Golang

Учетная запись Docker Hub

IDE (я использовал VSCode)

Базовые знания Linux

Решительность, любопытство и настойчивость, как ВСЕГДА

Шаг 1

В VSCode мы создадим нашу папку, назовем её «docker» и запустим наш файл «main.go». Если вы следили за моим путешествием по Go, то знаете, что мы начинаем с команды «package main», которая отвечает за создание исполняемой программы. Мы также добавим импорт, необходимый для нашего скрипта.

package main

import (
 "os"
 "text/template"
)

Затем мы приступаем к написанию кода, который создаст наш файл конфигурации NGINX, который будет статической веб-страницей. Я хотел бы разбить каждый раздел кода, чтобы указать, какой раздел за что отвечает.

Мы пишем шаблон для файла конфигурации NGINX и указываем блок сервера с портом прослушивания, именем сервера и каталогом для обслуживания веб-контента. В целом, он генерирует файл конфигурации, используемый для запуска сервера NGINX.

Руководство Golang по запуску веб-сервера с помощью Docker
func main() {
 nginxTemplate := `
server {
    listen   80;
    server_name localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html;
    }
}

Следующая часть кода будет включать создание файла NGINX и его запись на диск. Он использует шаблон для создания файла и анализирует содержимое этого файла, и если есть ошибка, это вызовет panic. Затем код открывает файл для записи, и если в файле есть ошибка, это тоже вызовет panic. Часть сценария «defer» откладывает закрытие файла, гарантируя, что он будет правильно закрыт, когда функция вернётся.

tmpl, err := template.New("nginx.conf").Parse(nginxTemplate)
 if err != nil {
  panic(err)
 }

 f, err := os.Create("nginx.conf")
 if err != nil {
  panic(err)
 }
 defer f.Close()

Наша последняя часть кода генерирует файл конфигурации NGINX путём выполнения и записи вывода в файл. Он проверит наличие ошибок и завершит программу, если обнаружит их (через panic в нашем коде). Если наше выполнение прошло успешно, он выведет «Успешно сгенерированный nginx.conf» для вывода, когда скрипт запускается с помощью команды «go run main.go».

err = tmpl.Execute(f, nil)
 if err != nil {
  panic(err)
 }

 println("Generated nginx.conf successfully")
}
Руководство Golang по запуску веб-сервера с помощью Docker

После создания файл «nginx.conf » будет выглядеть так:

Руководство Golang по запуску веб-сервера с помощью Docker

Шаг 2 :

Теперь мы будем создавать наш образ с помощью Docker. Вам нужно будет назвать файл «Dockerfile» (вам не нужно добавлять расширение к имени вашего файла, например, «.txt » или «.dockerfile ». Это то, о чём я не знал и узнал лишь во время устранения неполадок).

Руководство Golang по запуску веб-сервера с помощью Docker

Убедитесь, что у вас открыт Docker Desktop, потому что при запуске команды «docker build -t my-nginx-image» без неё вы получите эту ошибку:

Руководство Golang по запуску веб-сервера с помощью Docker

Как только мы откроем Docker Desktop, он будет выглядеть так:

Руководство Golang по запуску веб-сервера с помощью Docker

Давайте снова запустим нашу команду «docker build -t my-nginx-image ». У вас должно отобразиться следующее:

Руководство Golang по запуску веб-сервера с помощью Docker

Теперь, когда наша сборка завершена, давайте перейдем к Docker Desktop, чтобы посмотреть, сгенерировал ли он наш образ:

Руководство Golang по запуску веб-сервера с помощью Docker

БУМ! Наш образ nginx вывел ошибку, с которой столкнулся при попытке заставить его работать, первоначально связанную с ошибкой «no events section in configuration» всякий раз, когда я проверял журналы контейнера в Docker Desktop. Когда вы загружаете журналы в Docker Desktop, это будет выглядеть так:

Руководство Golang по запуску веб-сервера с помощью Docker

Исправление этого момента состояло в том, чтобы добавить раздел событий в файл конфигурации NGINX (изображённый на шаге 1), связанный с сетевыми подключениями, которые NGINX использует максимальное количество подключений, установленных одновременно. Сделав настройки, нам нужно повторно запустить нашу команду «docker build -t my-nginx-image», чтобы создать образ.

Шаг 3 :

Затем нам нужно запустить контейнер Docker и сопоставить его с портом, и мы делаем это, выполнив команду «docker run -p 8080:80 my-nginx-image ». Вы получите этот вывод после запуска команды:

Руководство Golang по запуску веб-сервера с помощью Docker
docker run -p 8080:80 my-nginx-image

Давайте вернёмся, чтобы снова проверить Docker Desktop и наши контейнеры:

Руководство Golang по запуску веб-сервера с помощью Docker

Проверяем, доступен ли наш веб-сервер, просто перейдя по адресу «http://localhost:8080» через веб-браузер:

Руководство Golang по запуску веб-сервера с помощью Docker

Оно работает! Что мы можем сделать с этим изображением, так это отправить его в наш Docker Hub, который сохранит образ в нашем репозитории.

Заключительные мысли :

Я хотел получить возможность попрактиковаться в Docker и посмотреть, как он работает в Golang, поскольку Docker — это широко используемый программный инструмент в сфере DevOps. Я также хотел узнать, с какими проблемами я столкнусь при выполнении этого проекта и как устранить эти проблемы, чтобы извлечь из них уроки. Это был очень интересный познавательный проект. Обратная связь всегда приветствуется, потому что она помогает мне расти как инженеру, ориентирующемуся в пространстве Cloud/DevOps. Увидимся в следующей статье!



















+1
0
+1
1
+1
0
+1
0
+1
1

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *