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
-
建立Dockerfile ---- 按照常規就是應該用 Dockerfile 檔名,沒找到什麼解釋, 內容如下:
#以centos為基準映象
FROM centos:latest
#釋出者資訊
MAINTAINER arno
#copy main.go編譯後的可執行檔案 main至docker中的/workspace目錄中
COPY main /workspace/
//執行個命令打印出歡迎資訊
CMD echo “hello docker!” -
構建Dockerfile為新的映象
docker build -t hello_docker .
"hello_docker"是為新的映象名 -
啟動映象
docker run -it -d -p 8999:8999 hello_docker:latest /bin/bash -
進入映象docker exec -t 41428c6b1a59 /bin/bash
-
進入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 !