Kubernetes ArgoCD 간단한 웹 프로그래밍 개발 및 DockerHub 업로드

간단한 웹 프로그래밍 개발 및 DockerHub 업로드

이제는 간단한 Hello World 웹 어플리케이션을 만들어 보자.

우리 예제는 go gin 을 이용하여 개발해 볼 것이다.

go module 설치

go mod init com.github.schooldevops.go.gin

go: creating new go.mod: module com.github.schooldevops.go.gin

Gin 의존성 가져오기

go get -u github.com/gin-gonic/gin

...

위와 같이 필요한 모듈을 가져왔다.

간단한 샘플 작성하기.

main.go 파일을 열어 다음 내용을 추가한다.

package main

import (
	"bufio"
	"net/http"
	"os"
	"strings"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	//	헬스 체크 수행하기. 
	r.GET("/health", helathCheck)

	//	:greet 에 해당하는 path parameter 를 획득하여 인사를 반환한다. 
	r.GET("/hello/:greet", greeting)

	r.Run()
}

func helathCheck(c *gin.Context) {

	line := readFile("health")
	if strings.Contains(string(line), "OK") {
		c.String(http.StatusOK, string(line))
	} else {
		c.String(http.StatusInternalServerError, string(line))
	}
}

func readFile(fileName string) string {

	fo, err := os.Open("health")
	if err != nil {
		return ""
	}

	reader := bufio.NewReader(fo)
	for {
		line, isPrefix, err := reader.ReadLine()
		if isPrefix || err != nil {
			break;
		} else {
			return string(line)
		}
	}

	return ""
}

func greeting(c *gin.Context) {
	greet := c.Param("greet")
	c.String(http.StatusOK, "Hello " + greet)
}

위 코드는 2개의 REST API 를 제공한다.

  • /helath : 헬스체크 요청에 대한 응답을 수행한다.
  • /hello/:greet : :greet 값을 받아서 Hello <인사> 말을 응답한다.

테스트 수행하기.

기본적으로 gin 은 8080으로 서비스가 된다.

curl http://localhost:8080/helath
OK

curl http://localhost:8080/hello/kido
Hello kido

Docker 파일 작성하기.

Dockerfile 을 생성하고 다음과 같이 작성한다.

FROM golang:1.12 AS build

WORKDIR /src/
COPY main.go /src/
COPY go.mod go.sum /src/
RUN go mod download
RUN CGO_ENABLED=0 go build -o /bin/webserver

FROM alpine:latest
COPY --from=build /bin/webserver /bin/webserver
COPY health /bin/
WORKDIR /bin/
ENTRYPOINT ["/bin/webserver"]

빌드 및 Docker hub push 하기.

빌드하기

필자의 docker hub 의 계정은 unclebae 이므로 이미지 이름을 작성할 때 unclebae/ 로 작성했다.

docker build -t unclebae/gogreet:v1.0 .

Docker login 수행하기.

docker login

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: unclebae
Password: 
Login Succeeded

푸시하기

docker push unclebae/gogreet:v1.0

The push refers to repository [docker.io/unclebae/gogreet]
5f70bf18a086: Pushed 
d79e9e023899: Pushed 
625f475afe8e: Pushed 
cb381a32b229: Mounted from library/alpine 
v1.0: digest: sha256:a96e03a55b71ea55db3186fbf5ac612593d84d582e853fce2d312801fa2bf5f3 size: 1152

go-web-docker

위와 같이 docker hub 에 정상으로 push 되었음을 확인할 수 있다.