Dockerize услуги, написани на Go, SpringBoot & Ballerina - сравнение

Исках да видя колко лесно е да напишете обикновена HTTP базирана услуга и да я разгърна в докер среда. Взех три различни езика / рамка (Go, SpringBoot, Ballerina), които могат да се използват за писане на http услуги и да сравня тяхната поддръжка за това как лесно да докерирате услугата и след това да я разгърнете. Нека разгледаме всеки от тях с примери.

Отивам

Go има вградена поддръжка за писане на http базирани услуги. Примерната http услуга в Go е както е показано по-долу.

Можем да изградим и стартираме тази go go програма както по-долу.

$ go изгради helloWorld.go
$ ./helloWorld

След като стартираме това, можем да получим достъп до тази услуга, използвайки URL адреса - http: // localhost: 8080 / hello

Нека разгледаме как да разгърнем горната услуга в Docker среда. Не можах да намеря пряк напред или местен подход за разгръщане на горното в Docker среда, тъй като първо трябва да започнем с писането на Dockerfile ръчно, за да разгърнем горната услуга go. След като извърших известно търсене, успях да напиша разгръщане на тази услуга, като написах dockerfile и изградих и разгърна.

Примерен файл за докер, който използвах, е както следва.

Използвах последното изображение на докер на go build за това и след като създадох docker файла, трябва да го изградим и да го стартираме по-долу.

$ docker build -t <име на име>.
$ docker run -d -p 8080: 8080

Услугата вече ще се изпълнява в контейнер за докер и може да се получи достъп чрез същия URL адрес, както преди.

SpringBoot

SpringBoot предоставя лесен начин за зареждане на приложение. Използвах онлайн инструмента за инициализатор на пролетта, за да създам приложение SpringBoot. Той ще създаде проект maven, който при изграждането ще създаде изпълним jar файл с всички необходими зависимости.

Най-малкото ни трябват следните класове, за да изградим обикновена http услуга.

Клас на приложение, който управлява приложението

Контролер на заявка, който обработва заявката / отговора.

Можем да изградим и стартираме горната услуга, като използваме maven / java както по-долу.

$ mvn чиста инсталация
$ java -jar target / hello-world-1.0.jar

Мрежата SpringBoot използва tomcat отдолу, за да разгърне и разкрие услугата и можем да получим достъп до услугата на - http: // localhost: 8080 / hello

Сега нека да видим как да докеризираме горната услуга, базирана на Spring.

За SpringBoot също трябва да започнем от създаването на Dockerfile ръчно и да включим съответните инструкции, необходими за изграждането на изображението на докер от изпълнимия буркан, който получихме от предишната стъпка.

Пример Dockerfile за сценария SpringBoot с минимален набор от инструкции ще бъде като по-долу

Можем да изградим горния Dockerfile и след това да го изпълним както по-долу.

$ docker build -t <име на име>.
$ docker run -d -p 8080: 8080

След като стартираме горния контейнер, бихме могли да имаме достъп до услугата, използвайки същия URL адрес, както преди.

балерина

Balleirna има първокласна поддръжка за писане и експониране на услуги. Една проста HTTP базирана услуга, написана на балерина, е както следва.

Можем да изградим и стартираме тази услуга на Балерина, както е посочено по-долу.

$ balerina build helloWorld.bal
$ balerina run helloWorld.balx

След като стартираме горната услуга, можем да получим достъп до нея на - http: // localhost: 9090 / hello / sayHello

Сега нека да видим как да докеризираме тази услуга и да я разгърнем. Оказва се, че Балерина има вградена поддръжка за лесно създаване на изображение на докер за горната услуга. Потребителят няма да е необходимо да започне ръчно да създава Dockerfile и да го изгражда, тъй като всички функционалности са дадени на местно ниво на езика на Балерина. Има лесно достъпни пояснения, свързани с разполагането на докер, които идват от модул (балеринакс / докер), които могат да се използват с горната услуга. Актуализирана версия на горната услуга с пояснения за разполагане на докер е следната.

Изглежда доста направо, за да разберете горните пояснения. @Docker: Expose ще уведоми средата на докера за това какви портове да бъдат изложени. @Docker: Config ще има основното име на докер изображение, маркер, версии и т.н., необходими за създаването на Dockerfile.

След актуализиране на услугата с пояснения, свързани с docker, след като я изградим, Балерина автоматично ще генерира Dockerfile, ще го изгради и ще създаде изображението на докер, което влиза в локалния регистър на докерите. Изходът на сглобяването ще изглежда по-долу.

Автогенерираният Dockerfile ще съдържа следното съдържание.

От горното съдържание можем да видим, че стойностите, дадени с пояснения, са били използвани при създаването на Dockerfile.

Сега трябва само да издадем командата за изпълнение, както е показано по-долу, която беше предложена в изходния резултат.

$ docker run -d -p 9090: 9090 helloworld: v1.0

С горната команда за изпълнение трябва да имаме достъп до услугата Ballerina, работеща в контейнер, използвайки същия URL адрес преди.

Затова разгледахме как да напишем обикновена http услуга в Go, SpringBoot & Ballerina и как да докеризираме услугата и да разположим в контейнер.

В обобщение, Go и SpringBoot се нуждае от допълнителна и ръчна работа, за да изгради изображение на докер от http / услугата / приложението. Но Балерина има вградена поддръжка за изграждане на изображения на докери от услуги и разполагането им, което изглежда запълва празнината на програмните езици, осигуряващи поддръжка за интеграционни аспекти.