Перейти к содержимому
Главная страница » Запуск приложения GO в Docker

Запуск приложения GO в Docker

В этой статье мы создадим простой REST API приложение «Hello world» на языке Goland, а после упакуем его в Docker контейнер, запустим и проверим наше приложение из контейнера Docker.

Я разворачивать проект буду на Linux Ubuntu/Debian, но аналогично это можно сделать и в операционной системе Windows.

Приложение «Hello world» на GO

Установим Goland:

sudo apt update
sudo apt upgrade
sudo apt install golang

Проверим, что все установлено правильно:

go version

Давайте начнём с создания простого REST API приложения «Hello world» на Go. Наша структура проекта будет выглядеть следующим образом:

├── Dockerfile
├── go.mod
└── main.go

Создаем каталог HelloWorld:

mkdir -p helloworld

В каталоге разместим файл main.go:

cd helloworld
nano main.go

Скопируйте и вставьте следующий код:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, World!")
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

Этот код создаёт HTTP-сервер, который прослушивает порт 8080 и возвращает сообщение «Hello, World!».

Теперь давайте создадим и протестируем наш REST API. Откройте терминал и перейдите в каталог, в котором вы сохранили файл main.goВыполните следующую команду:

go run main.go

Проверим работу нашего приложения. Откройте веб-браузер и перейдите по адресу  http://localhost:8080 или http://IP-сервера:8080, если разворачивали приложение на другом сервере. В браузере должно появиться сообщение «Hello, World!»

Контейнеризация приложения GO в Docker

Теперь, когда наш REST API приложение «Hello, World!» работает, давайте упакуем его в контейнер с помощью Docker. Создайте новый файл с именем Dockerfile в том же каталоге, что и main.go. Скопируйте и вставьте следующий код:

nano Dockerfile
FROM golang:alpine

WORKDIR /app

COPY go.mod ./

RUN go mod download

COPY . .

RUN go build -o main .

EXPOSE 8080

CMD ["./main"]

Разберем построчно:

  • FROM golang:alpine: эта строка указывает базовый образ для сборки приложения Go.
  • WORKDIR /app: задает рабочий каталог внутри контейнера Docker.
  • COPY go.mod go.sum ./: копирует файлы зависимостей.
  • RUN go mod download: загружает зависимости.
  • COPY . .: Копирует весь исходный код в контейнер.
  • RUN go build -o main .: компилирует приложение Go.
  • EXPOSE 8080: указывает, какой порт будет прослушивать контейнер во время выполнения.
  • CMD [«./main»]: команда, которая будет выполняться при запуске контейнера.

В этом Dockerfile указано, что в качестве базового образа для нашего контейнера мы будем использовать дистрибутив Alpine Linux. Затем мы задаём рабочий каталог /app и копируем в него файлы go.mod и go.sum. Мы запускаем go mod download для загрузки зависимостей, указанных в файле go.mod.

Затем мы копируем весь каталог в контейнер и запускаем go build для создания двоичного исполняемого файла с именем main. Мы открываем порт 8080, на котором работает наш HTTP-сервер. Наконец, мы задаём команду для запуска нашего исполняемого файла.

Создадим в нашей директории файлы зависимостей go.mod и go.sum:

nano go.mod

Содержимое файла go.mod:

module hellow-world
go 1.19
nano go.sum

Также создать файлы зависимостей можно командой:

 go mod init hellow-world

Создадим образ Docker на основе Dockerfile:

docker build -t hello-world .

Проверим наличие образа в локальном репозитории:

docker images

Запуск приложения GO в Docker контейнере

Теперь, когда мы создали образ Docker, давайте запустим его и протестируем. 
Выполните в терминале следующую команду:

docker run -p 8080:8080 hello-world

Docker-compose файл для приложения на Go

Создайте файл с именем docker-compose.yml в том же каталоге со следующим содержимым:

version: "3.8"
services:
  web:
    build: .
    ports:
      - "8080:8080"

Чтобы запустить приложение, используйте следующую команду:

docker-compose up

В этой статье мы узнали, как создать простой REST API «Привет, мир!» на языке Go, а затем упаковали его в образ Docker. Мы также узнали, как запускать и тестировать наш контейнер Docker. Контейнеризация приложений с помощью Docker позволяет легко развертывать и запускать их на любой платформе, не беспокоясь о зависимостях или настройках.

Ссылки:

Hosting a Go “Simple” Web Application with Docker Compose

Добавить комментарий

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