'你好世界!' 應(yīng)用:如何Docker化Golang應(yīng)用

言鼎科技 2023-06-29 430

介紹

您是否覺得開始使用 Docker 令人生畏?您想邁出第一步,成功將 golang 應(yīng)用程序 docker 化嗎?您是否找不到基本的分步教程來對(duì)golang 應(yīng)用程序進(jìn)行 docker 化?所有這些問題和一個(gè)答案——如果是,那么您選擇了正確的教程!

本教程的目的是讓初學(xué)者了解 Docker。在本指南中,我們將構(gòu)建一個(gè)“Hello, World”應(yīng)用程序并按照簡單的步驟對(duì) golang 應(yīng)用程序進(jìn)行 docker 化。事不宜遲,讓我們開始我們的教程。

Dockerize Golang 應(yīng)用程序的先決條件

在構(gòu)建應(yīng)用程序之前,請(qǐng)確保您的系統(tǒng)安裝了 docker 和 golang。如果沒有,請(qǐng)?jiān)L問下面的鏈接進(jìn)行安裝。
? 安裝Docker
? 安裝Golang

項(xiàng)目設(shè)置

首先,讓我們創(chuàng)建 main.go 文件并使用命令初始化應(yīng)用程序去修改初始化

我們的項(xiàng)目結(jié)構(gòu)將如下所示 -

sample-dockerize-app
|– main.go
|– Dockerfile

我們的main.go將包含以下代碼。


包主
進(jìn)口 (
“編碼/json”
“調(diào)頻”
“日志”
“網(wǎng)絡(luò)/http”

“github.com/gorilla/mux”)
功能主要(){
路由器 := mux.NewRouter()
router.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
  響應(yīng):=地圖[字符串]字符串{
    "message": "歡迎使用 Dockerized 應(yīng)用程序",
  }
  json.NewEncoder(rw).Encode(響應(yīng))
})

router.HandleFunc("/{name}", func(rw http.ResponseWriter, r *http.Request) {
  變量 := mux.Vars(r)
  名稱:=變量[“名稱”]
  var 消息字符串
  如果名字==“”{
    消息=“你好世界”
  } 別的 {
    消息=“你好”+名字
  }
  響應(yīng):=地圖[字符串]字符串{
    “消息”:消息,
  }
  json.NewEncoder(rw).Encode(響應(yīng))
})

log.Println("服務(wù)器正在運(yùn)行!")
fmt.Println(http.ListenAndServe(":8081", router))}

創(chuàng)建一個(gè) Docker 鏡像

正如 Docker 文檔所說——

映像包括運(yùn)行應(yīng)用程序所需的一切——代碼或二進(jìn)制文件、運(yùn)行時(shí)、依賴項(xiàng)以及所需的任何其他文件系統(tǒng)對(duì)象。

圖像包含您的應(yīng)用程序定義以及以最簡單的方式運(yùn)行應(yīng)用程序所需的一切。

創(chuàng)建 docker 鏡像需要在配置文件中編寫步驟。最常用的文件名是 Dockerfile,但您可以使用您選擇的任何名稱。但是,在我看來,遵循標(biāo)準(zhǔn)總是更好。

現(xiàn)在,創(chuàng)建一個(gè)名為Dockerfile的文件并編寫以下代碼。


# 構(gòu)建階段# 首先拉取 Golang 鏡像來自 golang:1.17-alpine 作為 build-env
# 設(shè)置環(huán)境變量ENV APP_NAME sample-dockerize-appENV CMD_PATH main.go
# 將應(yīng)用程序數(shù)據(jù)復(fù)制到圖像中復(fù)制 。$GOPATH/src/$APP_NAMEWORKDIR $GOPATH/src/$APP_NAME
# 構(gòu)建應(yīng)用程序運(yùn)行 CGO_ENABLED=0 go build -v -o /$APP_NAME $GOPATH/src/$APP_NAME/$CMD_PATH
# 運(yùn)行階段來自高山:3.14
# 設(shè)置環(huán)境變量ENV APP_NAME sample-dockerize-app
# 僅將需要的數(shù)據(jù)復(fù)制到此圖像中復(fù)制 --from=build-env /$APP_NAME 。
# 暴露應(yīng)用端口暴露 8081
# 啟動(dòng)應(yīng)用命令 ./$APP_NAME

完成文件后,運(yùn)行以下命令更新應(yīng)用程序的依賴項(xiàng)


整理一下

構(gòu)建并運(yùn)行 Docker 鏡像

使用以下命令構(gòu)建 docker 鏡像。


docker build --rm -t golang-docker-example 。

成功執(zhí)行命令后,您的屏幕將顯示以下輸出。


此命令將構(gòu)建圖像并用名稱標(biāo)記它golang-docker-示例. 現(xiàn)在,它只會(huì)構(gòu)建圖像,不會(huì)做任何事情。下一次將運(yùn)行圖像來處理請(qǐng)求。運(yùn)行的鏡像就是我們所說的容器。

使用以下命令運(yùn)行圖像。


docker run -p 8081:8081 golang-docker-example

執(zhí)行成功!


-p標(biāo)志用于定義端口綁定。我們?cè)谌萜鲀?nèi)的應(yīng)用程序?qū)⒃?8081 端口上運(yùn)行,我們將其綁定到主機(jī)端口,即 8081。您也可以使用不同的端口進(jìn)行綁定。為此,您可以運(yùn)行-p $HOST_PORT:8081, 例如-p 3000:8081.

完成后,瞧!您的應(yīng)用程序?qū)⒃诙丝?8081 上運(yùn)行。您現(xiàn)在已成功將 golang 應(yīng)用程序 docker 化。打開瀏覽器并點(diǎn)擊 http://localhost:8081 檢查您的應(yīng)用程序。

您的瀏覽器將顯示


您還可以運(yùn)行 http://localhost:8081/{name}* 并將 {name}* 替換為將打印具有變量的消息的任何內(nèi)容。


源代碼:Golang Docker 示例 Github

您可以運(yùn)行以下命令克隆 github 存儲(chǔ)庫以使用代碼,并隨時(shí)訪問golang docker 示例 github

git 克隆 https://github.com/DekivadiyaKishan/golang-docker-example.git

結(jié)論

所以,這是一個(gè)關(guān)于如何對(duì) golang 應(yīng)用程序進(jìn)行 dockerize 的初學(xué)者教程。我希望本教程至少能幫助您開始使用 Docker。如果您是 Golang 愛好者并想探索 Golang,請(qǐng)?jiān)L問Golang 教程頁面。

如果您正在尋找可以幫助您滿足項(xiàng)目要求的熟練開發(fā)人員,請(qǐng)聯(lián)系 Bacancy 并聘請(qǐng) golang 開發(fā)人員

言鼎科技

The End