오늘날의 클라우드 컴퓨팅 시대에 컨테이너화는 애플리케이션 배포 및 관리에 매우 인기 있는 방법이 되었습니다. Gin 프레임워크는 GO 언어의 경량 웹 프레임워크로, 고성능, 낮은 메모리 소비 및 쉬운 유지 관리라는 특징을 가지고 있으므로 GO 언어를 사용하는 웹 개발에 선호되는 프레임워크 중 하나가 되었습니다. 이 글에서는 Gin 프레임워크를 사용하여 컨테이너화된 배포 및 관리 기능을 구현하는 방법을 함께 살펴보겠습니다.
1. Docker 소개
Docker는 현재 가장 널리 사용되는 컨테이너 기술로, 애플리케이션과 해당 종속성을 컨테이너로 패키징하여 어디에서나 쉽게 실행할 수 있습니다. Docker는 오픈 소스이며 업계에서 사실상의 표준 컨테이너 솔루션이 되었습니다.
2. Gin 프레임워크의 Docker 패키징 예
다음은 Docker를 사용하여 Gin 프레임워크를 패키징하는 간단한 예입니다.
mkdir docker-gin && cd docker-gin
FROM golang:1.13
WORKDIR /go/src/app
RUN go get github.com/gin-gonic/gin
ADD ./go/src/app
CMD ["go", "run", "main.go"]
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func (c *gin.Context) {
c.JSON(200, gin.H{ "message": "Hello World", })
})
r.Run(":8080")
}
docker build -t docker-gin .
docker run -p 8080:8080 docker-gin
지금 할 수 있습니다. http://localhost:8080을 통해 애플리케이션에 액세스하세요.
그러나 그 후에는 배포 및 관리 목적을 달성하기 위한 몇 가지 논리를 추가로 작성합니다.
3. 컨테이너화 배포 및 관리
위의 예를 바탕으로 컨테이너화 배포 및 관리 기능을 구현하기 위해 다음 두 가지 API를 추가합니다.
file, header, err := c.Request.FormFile("file")
if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return
// 업로드된 파일을 로컬
filename := "deploy/" + header.Filename
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
zipReader, err := zip. OpenReader(filename )
if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
srcObj, err := zipFile.Open() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } defer srcObj.Close() dstPath := "deploy/" + zipFile.Name if !strings.HasPrefix(dstPath, "deploy/") { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid file"}) return } if zipFile.FileInfo().IsDir() { os.MkdirAll(dstPath, zipFile.Mode()) } else { dstObj, err := os.Create(dstPath) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } defer dstObj.Close() _, err = io.Copy(dstObj, srcObj) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } }
cmd: = exec.Command("bash", "-c", "docker build -t docker-gin-"+strconv.FormatInt(time.Now().Unix(), 10)+" . && kubectl 적용 -f 배포 .yml")
cmd.Dir = "./deploy" out, err = cmd.CombinedOutput()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
DELETE /stop: 현재 컨테이너를 닫습니다
// Get 현재 컨테이너 ID
호스트 이름, err := os.Hostname() if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
// 현재 컨테이너 닫기
cmd = exec.Command("bash", "-c", "kubectl delete pod "+podName)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return
위 두 API의 구현은 컨테이너 관리를 위한 Kubernetes를 기반으로 합니다. 여기서는 자세히 소개하지 않겠습니다.
위 내용은 Gin 프레임워크를 사용하여 컨테이너화된 배포 및 관리 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!