這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/53635529 未經博主允許不得轉載。
博主地址是:http://blog.csdn.net/freewebsys
1,關於alpine 環境
http://blog.csdn.net/freewebsys/article/details/53615757
昨天研究了下golang的http伺服器。
發現在啟動的時候報錯:
No such file or directory
發現這個錯誤,開始還以為是alpine 的系統lib庫少了,
必須使用docker 官方的golang鏡像呢。
後來研究明白了,其實是因為我的宿主是centos。
我在centos 上編譯了 golang,然後拷貝到alpine 環境上造成的。
解決辦法。
1,使用golang:alpine 鏡像 241 mb 進行編譯,映射一個檔案夾。
2,然後把編譯好的檔案拷貝出來,放到alpine的鏡像上即可。
這樣一個15.24 MB golang 環境就好了。
因為還安裝了一個 bash ,可以進入系統查看。
2,操作流程
首先構建一個golang build 的環境。
FROM docker.io/golang:alpineRUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN apk add --update curl bash && \ rm -rf /var/cache/apk/*
編譯鏡像:
docker build -t demo/go-build:1.0 .
啟動鏡像,並把/data/go 目錄映射到 /data/go目錄,其中–rm 表示退出之後刪除鏡像。
docker run -it -v /data/go:/data/go --rm demo/go-build:1.0 /bin/bash#cd /data/go#go build http.go
其中http.go 檔案:
package mainimport ( "fmt" "net/http")func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])}func main() { http.HandleFunc("/", handler) http.ListenAndServe("0.0.0.0:8080", nil)}
摘自golang 官方的httpdemo。
3,將alpine 和go http打包
在alpine環境下編譯的http 包再做一個鏡像,拷貝到alpine系統下:
FROM docker.io/alpine:latestMAINTAINER demo <juest a demo>RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN apk add --update curl bash && \ rm -rf /var/cache/apk/*RUN mkdir -p /data/goCOPY http /data/goEXPOSE 8080ENTRYPOINT ["/data/go/http"]
打包,並把http 啟動。
docker build -t demo/go-http:1.0 .docker run -d -p 8080:8080 --name go-http demo/go-http:1.0
直接存取 curl localhost:8080 即可了。
4,總結
本文的原文串連是: http://blog.csdn.net/freewebsys/article/details/53635529 未經博主允許不得轉載。
博主地址是:http://blog.csdn.net/freewebsys
這個是個非常好的實現,怪不得golang 號稱是雲端運算設計的語言呢。直接在alpine 5mb的系統上運行了,在安裝一個bash,一共才15 mb,咋做版本升級,版本備份都行。
厲害了我的哥,golang 實在是太喜歡了。
準備把背景系統都設計設計用 golang 重寫吧。
其實java能做的golang 都能做呢。
java 打上一個jre 都 100 mb以上了。看看人家golang 才 幾mb。
啥東西都齊了。golang真的是雲端運算的語言了呢。