網頁

2023/2/5

Go 建立docker image

將Go應用程式製作為docker image並運行在docker container。


範例環境:

  • macOS Ventura 13.1
  • Docker 20.10.21
  • Go 1.19


事前要求

參考「Golang 建立網頁伺服器 Web Server」建立要作為docker image的Go應用程式專案。


Dockerfile

在Go專案根目錄新增Dockerfile檔內容如下,此為建構docker image的檔案。

Dockerfile

# syntax=docker/dockerfile:1

FROM golang:1.19-alpine
WORKDIR /app
COPY ./* ./
RUN go mod download
RUN go build -o /go-demo
EXPOSE 8080
CMD [ "/go-demo" ]

github

  • FROM golang:1.19-alpine - 使用golang:1.19-alpine為建構時的base image。
  • WORKDIR /app - 指定container的/app目錄為後面Docker命令的工作目錄。
  • COPY ./* ./ - 把host執行docker build時的所在目錄下的所有檔案複製到container的WORKDIR下的./(即/app)。
  • RUN go mod download - 在containers的WORKDIR執行go mod downloadgo.mod下載依賴的go modules。
  • RUN go build -o /go-demo - 執行go build編譯當下目錄中的Go專案為執行檔並輸出為/go-demo
  • EXPOSE 8080 - 宣告Go應用程式運行的docker container對外暴露8080 port。
  • CMD [ "/go-demo" ] - 在container的WORKDIR執行/go-demo


Build image

Dockerfile同目錄執行docker build -t go-demo .把Go應用程式建構為docker image。

  • -t後的參數為image名稱,所以製作的image為"go-app"。
  • .表示使用所在目錄中的Dockerfile來build image。

image製作好後會存在本機的docker registry。執行docker images列出現有的images,可以看到製作好的go-demo。

% docker images
REPOSITORY        TAG         IMAGE ID       CREATED              SIZE
go-demo           latest      9fef9e714dc5   About a minute ago   363MB


Push image

參考「Docker 推送image至Docker Hub」。


Run image

在命令列輸入docker run --name go-demo -d -it -p 8080:8080 go-demo:latest運行Go應用程式的image "go-demo"於docker容器。

% docker run --name go-demo -d -it -p 8080:8080 go-demo:latest
90aaceaf0a7cedf820fc9d6d280c29ea45f22ffc618befa0391d47268b3bb003

在命令列輸入docker ps檢視運行的go-demo container。

% docker ps
CONTAINER ID   IMAGE            COMMAND      CREATED         STATUS         PORTS                    NAMES
90aaceaf0a7c   go-demo:latest   "/go-demo"   4 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp   go-demo


測試

在瀏覽器網址列輸入http://localhost:8080/hello?name=john得到的回應結果如下。

hello, john


沒有留言:

張貼留言