1.首先編寫dockerfile 文件
#使用基礎的官方鏡像 FROM golang:1.17-alpine As build #工作目錄 WORKDIR /project/ #複製 COPY . /project #製作鏡像的時候運行 設置 go代理, 設置go mod 模式 RUN go env -w GOPROXY=https://goproxy.io,direct RUN go env -w GO111MODULE=on #編譯二進制文件 Go的runtime環境變量CGO_ENABLED=1,即默認開始cgo,允許你在Go代碼中調用C代碼 #CGO_ENABLED 如果標準庫中是在CGO_ENABLED=1情況下編譯的,那麼編譯出來的最終二進制文件可能是動態鏈接, # 所以建議設置 CGO_ENABLED=0以避免移植過程中出現的不必要問題。 # GOOS 編譯目標平臺上的操作系統(darwin, freebsd, linux, windows) # GOARCH 編譯目標平臺上的硬件體系架構(amd64, 386, arm, ppc64等) RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o hello hello.go FROM alpine ENV TZ Asia/Shanghai COPY --from=build /project/hello /project/hello #定義工作目錄爲project WORKDIR /project #CMD ["./hello"] #聲明鏡像使用80端口 並不代表可以 直接訪問此端口 EXPOSE 80 #容器啓動命令 ENTRYPOINT ["./hello"]
2.編寫hello.go文件
package main import ( "fmt" "net/http" ) func Hello(w http.ResponseWriter, r *http.Request) { fmt.Println("handle hello") //服務端打印輸出 fmt.Fprintf(w, "hello GoLandWEB") } func login(w http.ResponseWriter, r *http.Request) { fmt.Println("handle login") fmt.Fprintf(w, "login ...") } func main() { http.HandleFunc("/", Hello) http.HandleFunc("/login", login) err := http.ListenAndServe("0.0.0.0:80", nil) if err != nil { fmt.Println("http listen failed") } }
3.執行docker build 命令
docker build -t hello:v2 .
4.查看鏡像 docker images
5.啓動容器
[root@k8s-master httpdemo]# docker run -p 80:80 hello:v2 handle hello handle hello
6.訪問測試
[root@k8s-master zhangxueqing]# curl 127.0.0.1:80 hello GoLandWEB