在這個 k8s 當道的時代,任何東西都要 container 化,當然我們也稍微介紹一下,如果用 Docker 編譯 golang image 。

首先我們要先準備一個 http api 會回應 Hello World 範例,如有對 docker 不了解的,可以先移步閱讀 Docker – 從入門到實踐,這樣會比較好了解下面的相關範例。

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello World")
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

這邊有列出,可以 build golang 的 image,在這邊列出使用 alpine 當作範例,撰寫 dockerfile 如下

FROM golang:1.11.2-alpine
WORKDIR /helloworld
ADD . /helloworld
RUN cd /helloworld && go build 
EXPOSE 8080
ENTRYPOINT ./helloworld

再來只要執行 docker 指令就完成了

//這邊是做 image 建立的動作 大家可以把 yourname 取代成自己想要名稱,後面則為你的專案名稱
docker build -t yourname/helloworld .
//這邊就是執行 image 讓他成為 container, --rm 代表執行完接著刪掉 container -p 代表把 cotainer 的 port 對接到你本機的實體 port
docker run --rm -p 8080:8080 -d yourname/helloworld

這時只要用瀏覽器訪問 http://127.0.0.1:8080/ping 就能看到 Hello World

整個 golang 的基礎介紹大致上到今天就差不多告一個段落了,剩下兩天的課程,預計會以公司的一些專案架構拿來分享,當然一些敏感的問題,會適當的轉化成比較通俗的應用。