Docker build go image
這裡記錄一下簡易的 Go build image 流程
首先,在這裡建立一個 golang dockerfile
ARG GO_VERSION=1.12
FROM golang:${GO_VERSION}-alpine
WORKDIR /app
ADD . /app
RUN cd /app && go build
EXPOSE 8080
ENTRYPOINT ./app
ARG
定義環境變數
FROM golang:1.11.2-alpine :
指定要執行的環境,會安裝 golang:1.12-alpine
WORKDIR /app :
在執行的環境建立 /app 目錄
ADD . /app:
將目前目錄位置的檔案都複製到docker /app 目錄中
RUN cd /app && go build
指定要運行的指令,這裡會進入 app/目錄後,執行 go build,將程式打包。
EXPOSE
設定 container 對外溝通的 port
ENTRYPOINT
指定在 container 執行時要執行的指令,這裡會執行已經打包的執行檔
建立 go lang 主程式
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))
}
運行 Dockerfile
我們先透過 docker build 來建立一個 image
在這裡可以自行指定 image_name/project_name
docker build -t image_name/project_name
如果要重新打包image,則可以加上 --no-cahce
docker build --no-cache -t demo/gohelloworld .
查看 image ,運行 ```docker
CVT2HUGO: images```
>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/gohellowlrd latest 4eaae7a97757 14 minutes ago 316MB
接著我們來啟動 container,由於這是 demo ,這裡會在加一個 –rm 可以在執行完畢之後就把 container 刪除。
-p 用來指定 contatiner 內部與外部的 port 對應,-d 則指定 image
docker run --rm -p 8080:8080 -d demo/gohellowlrd