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