1. 程式人生 > >004-devops之Dockerfile製作golang執行環境

004-devops之Dockerfile製作golang執行環境

Dockerfile 製作及使用(golang執行環境)

準備golang的簡單web工程程式碼 main.go ,功能是瀏覽器請求8999埠就返回“Hello World!”如下:

package main
import(
    "fmt"
    "net/http"
    "strings"
    "log"
)
func sayhelloName(w http.ResponseWriter,r *http.Request){
    r.ParseForm()//解析引數,預設是不會解析的
    fmt.Println(r.Form)//這些資訊是輸出到伺服器端的列印資訊
    fmt.Println("path",r.URL.Path)
    fmt.Println("scheme",r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    fork,v:=ranger.Form{
    fmt.Println("key:",k)
    fmt.Println("val:",strings.Join(v,""))
}
//這個寫入到w的是輸出到客戶端的
fmt.Fprintf(w,"Hello Wrold !")
}
func main(){
    http.HandleFunc("/",sayhelloName)//設定訪問的路由
    err:=http.ListenAndServe(":8999",nil)//設定監聽的埠
    if err != nil{
    	log.Fatal("ListenAndServe:",err)
	    }
}

備註: 在MAC中編譯linux版本的go執行檔案需要這樣:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

  1. 建立Dockerfile ---- 按照常規就是應該用 Dockerfile 檔名,沒找到什麼解釋, 內容如下:

    #以centos為基準映象
    FROM centos:latest
    #釋出者資訊
    MAINTAINER arno
    #copy main.go編譯後的可執行檔案 main至docker中的/workspace目錄中
    COPY main /workspace/
    //執行個命令打印出歡迎資訊
    CMD echo “hello docker!”

  2. 構建Dockerfile為新的映象
    docker build -t hello_docker .
    "hello_docker"是為新的映象名

  3. 啟動映象
    docker run -it -d -p 8999:8999 hello_docker:latest /bin/bash

  4. 進入映象docker exec -t 41428c6b1a59 /bin/bash

  5. 進入copy檔案的位置/workspace並執行main程式
    cd /workspace
    ./main

流程評策:啟動完docker後還需進入docker啟動golang主程式,這樣會增加工作量,尤其是在快速迭代的工作中儘量減少這樣的人工操作

下面來優化這個流程,讓CI工具在執行docker run時就完成啟動工作,去除人工部分
修改docker run 指令為: docker run -it -d -p 8999:8999 hello_docker:latest sh -c ‘./workspace/main’ /bin/bash

ok, 以後當CI工具執行完後,服務自動啟動,無需人為干預

至此docker與golang的環節打通,為CI 持續整合打好了基礎

如果我的文章對您有幫助,我恭喜你
如果對我的文章有任何的疑問或批評,我特別感謝你,即使你不確定也請大膽的說出來

生命不止,let’s go go go !