Docker - Go語言設定



Go,通常被稱為Golang,是一種靜態型別編譯型程式語言,旨在實現簡潔、高效和併發。它越來越受歡迎,已被科技巨頭和初創公司廣泛使用。

雖然Go保證了卓越的效能和良好的開發者體驗,但使用Docker進行容器化可以實現隔離、可移植性和高效的資源利用。這使我們的應用程式能夠變得健壯、高度可擴充套件且易於部署。

在本章中,我們將幫助您將Go應用程式Docker化。我們將解釋如何設定一個非常簡單的Go專案,並在Docker容器內編譯和執行它。

Golang應用程式Docker化的前提條件

首先,請確保您擁有以下內容。

  • 已安裝Golang − 從https://golang.org.tw/dl/下載並安裝Go。
  • Docker − 根據作業系統從https://www.docker.com/安裝Docker Desktop。
  • Go語言基礎知識 − 瞭解Go的語法、結構和構建命令非常有用。
  • Docker基礎知識 − 瞭解不同的Docker概念,例如映象、容器和Dockerfile,這將很有幫助。

一旦您具備了這些前提條件,您就可以構建您的Go應用程式並將其進一步容器化。

設定Golang專案

首先,讓我們為Go專案建立一個新目錄。您可以選擇任何您喜歡的名稱,但在本教程中,我們將使用go-docker-app。

$ mkdir go-docker-app
$ cd go-docker-app
Docker Setting Go 1

Go使用模組進行依賴管理。因此,讓我們首先為專案初始化一個新模組。在下面的命令中,您可以將go-docker-app替換為您實際的專案名稱。 `go mod init go-docker-app`

$ go mod init go-docker-app

上述命令將在您的專案目錄中建立一個go.mod檔案。此檔案有助於跟蹤依賴項和模組版本。

Docker Setting Go 2

現在,讓我們在專案的根目錄下建立一個基本的main.go檔案。在這個檔案中,我們將包含應用程式的入口點。

$ touch main.go

將以下程式碼插入main.go

package main

import (
   "fmt"
   "net/http"
)

func main() {
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      fmt.Fprintf(w, "Hello from Go!")
   })
   http.ListenAndServe(":8080", nil)
}

這段程式碼定義了一個簡單的HTTP伺服器,它監聽埠8080,並在訪問時返回“Hello from Go!”。

在本地執行Go專案

在將Golang專案Docker化之前,讓我們在本地測試Go應用程式。您可以執行以下命令 − `go run main.go`

$ go run main.go
Docker Setting Go 3

此命令將編譯並執行您的Go應用程式。執行後,您可以訪問瀏覽器中的以下URL來訪問應用程式:https://:8080

建立Dockerfile

讓我們為Golang應用程式建立一個Dockerfile,其中包含構建映象所需的所有命令。為此,讓我們在專案目錄的根目錄下建立一個名為Dockerfile的檔案,並複製以下程式碼。

# Use the latest official Golang image as the base
FROM golang:latest

# Set the working directory inside the container
WORKDIR /app

# Copy the Go module file (go.mod) to the working directory
COPY go.mod ./

# Download dependencies specified in go.mod
RUN go mod download

# Copy the main Go source file to the working directory
COPY main.go ./

# Build the Go application and name the output file as go-docker-app
RUN go build -o /go-docker-app

# Specify the command to run when the container starts, executing the built binary
CMD [ "/go-docker-app" ]

Dockerfile的解釋

  • FROM golang:latest − 使用最新的官方Golang映象作為基礎映象。
  • WORKDIR /app − 將容器內的工作目錄設定為/app。
  • COPY go.mod ./ − 將go.mod檔案複製到工作目錄。
  • RUN go mod download − 下載go.mod中指定的依賴項。
  • COPY main.go ./ − 將main.go檔案複製到工作目錄。
  • RUN go build -o /go-docker-app − 構建Go應用程式並將輸出檔案命名為go-docker-app。
  • CMD [ "/go-docker-app" ] − 指定容器啟動時要執行的命令,執行已構建的二進位制檔案。

在下一節中,讓我們構建Docker映象。

構建Golang Docker映象

現在我們的Dockerfile已準備就緒,我們可以繼續構建Docker映象。啟動終端並導航到專案目錄。然後,執行以下命令 − `docker build -t my-go-app .`

$ docker build -t my-go-app .

此命令執行以下操作 −

  • docker build − 指示Docker構建映象。
  • -t my-go-app − 將構建的映象標記為my-go-app。您可以使用任何所需的標籤名稱。
  • . − 指定當前目錄作為構建上下文,其中包括Dockerfile和您的專案檔案。

Docker將逐層處理Dockerfile中的所有指令以建立映象。

Docker Setting Go 4

使用以下命令,您可以透過列出主機上的所有Docker映象來驗證映象構建。 `docker images`

$ docker images
Docker Setting Go 5

執行Go Docker容器

現在映象已構建完畢,我們可以執行與此映象關聯的容器。您可以使用以下命令 − `docker run -p 8080:8080 my-go-app`

$ docker run -p 8080:8080 my-go-app

此命令執行以下操作 −

  • docker run − 要求Docker建立並啟動一個新容器。
  • -p 8080:8080 − 將容器的8080埠對映到主機機的8080埠。這允許您從瀏覽器訪問應用程式。
  • my-go-app − 指定要用於容器的映象。

您可以使用以下命令列出所有容器來驗證容器是否正在執行。 `docker ps`

$ docker container ls
Docker Setting Go 6

您可以看到容器正在執行。您現在可以在Web瀏覽器中訪問https://:8080處的Go應用程式。

Docker Setting Go 7

結論

在本章中,我們提供了Docker化Go應用程式所需的基礎知識。我們學習瞭如何有效地建立一個簡單的Go專案,適當地構建它,以及編寫一個構建容器化映象的Dockerfile。根據此處所述內容,一旦您瞭解了流程中起核心作用的內容,您現在應該能夠輕鬆地打包和部署Go應用程式。

您可以進一步研究高階Dockerfile技術、映象大小最佳化、多階段構建以及如何在Kubernetes等容器編排上構建Docker化應用程式。掌握這些概念將有助於您構建健壯、可擴充套件且易於維護的Go應用程式。

關於在Docker中設定Golang的常見問題

1. 如何為Golang應用程式建立Dockerfile?

Golang應用程式的普通Dockerfile通常首先繼承包含Golang執行時環境的映象。然後,它設定工作目錄,將Go原始碼複製到其中,構建可執行檔案,最後設定執行應用程式的命令。此映象的大小通常可以使用多階段構建進行最佳化。

2. 如何處理Docker化Golang應用程式中的依賴項?

為了在Docker化Golang應用程式中進行正確的依賴項管理,請使用go mod來管理專案中的依賴項。使用COPY指令的Dockerfile用於複製專案目錄(包括go.mod檔案)。透過這樣做,Docker構建過程將自動解析並下載專案依賴項。

3. 如何提高Docker化Golang應用程式的效能?

Docker化GoLang應用程式的最佳效能可以透過在基礎映象級別進行最佳化來實現,使用編譯後的二進位制檔案而不是讀取和解釋Go程式碼本身,以及分析您的應用程式。您可以嘗試使用不同的Docker映象層或嘗試構建快取。
廣告