docker學(xué)習(xí)筆記(2)-如何部署go到docker
1.編寫go程序
這里的demo,我寫的是一個(gè)Restful Api,沒(méi)有進(jìn)行封裝,只寫了一個(gè)go文件
package main
import (
"github.com/gorilla/mux"
"net/http"
"fmt"
"log"
"time"
"os"
)
func main() {
t1 := time.Now()
file, err := os.Create("test.log")
if err != nil {
log.Fatalln("fail to create test.log file")
}
logger := log.New(file, "", log.Llongfile)
logger.SetFlags(log.LstdFlags)
router := mux.NewRouter().StrictSlash(true)
router.HandleFunc("/", Index)
router.HandleFunc("/version", Version)
router.HandleFunc("/date", Date)
t2 := time.Since(t1)
fmt.Println("Startup time by : ", t2)
logger.Println("Startup time by : ", t2)
logger.Fatal(http.ListenAndServe(":8080", router))
}
func Date(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintln(writer, time.Now().Local().Format("2006-01-02"))
}
func Version(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintln(writer, "1.0.0")
}
func Index(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintln(writer, "Hello!")
}
下載相關(guān)包到本地,這里只有 github.com/gorilla/mux 需要下載
- 需要設(shè)置好GOPATH環(huán)境變量并已安裝好git,否則不生效
go get github.com/gorilla/mux
如果沒(méi)有g(shù)o的編譯環(huán)境,可以下載docker的go鏡像來(lái)進(jìn)行編譯,這里使用最新版本胀莹,可以根據(jù)自己的go程序需要下載對(duì)應(yīng)版本
docker pull golang
- 接下來(lái)利用golang的鏡像編譯go代碼
docker run --rm -it -v "$GOPATH":/gopath -v "$(pwd)":/app -e "GOPATH=/gopath" -w /app golang:latest sh -c 'CGO_ENABLED=0 go build --ldflags="-s" -o your_app_bin_name'
順利的話可執(zhí)行程序已經(jīng)生成了流纹,不順利就找找原因吧^_^!
go程序已經(jīng)就順利寫好榕酒,接下來(lái)就是生成鏡像了实苞。
2.生成鏡像
這里我采用了Dockerfile生成鏡像剪廉,其他生成方式不做概述
- 編寫Dockerfile
FROM iron/base
WORKDIR /app
COPY rest_api_test /app/
ENTRYPOINT ["./rest_api_test"]
Dockerfile編寫完就可以來(lái)生成鏡像了,命令比較簡(jiǎn)單
docker build -t restapitest:1.0.0 .
這時(shí)通過(guò)docker images可以看到鏡像已經(jīng)生成了,在容器中運(yùn)行一下試試
docker run -it --rm -p 80:8080 -d restapitest:1.0.0
此時(shí)訪問(wèn)本機(jī)地址的restfulApi接口就可以看到以下結(jié)果
curl http://127.0.0.1/version
1.0.0
curl http://127.0.0.1/date
2019-2-12
鏡像已順利制作成功^_^!
3.上傳鏡像到 hub.docker.com
鏡像成功生成朴肺,我們可以利用docker ps 看到剛剛運(yùn)行在容器中的究鏡像
想要上傳需要在hub.docker.coms上注冊(cè)賬號(hào)并建立自己的倉(cāng)庫(kù)哦窖剑。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ca8f61a3e0f restapitest:1.0.0 "./rest_api_test" 3 seconds ago Up 2 seconds 0.0.0.0:80->8080/tcp angry_haibt
利用docker commit 生成準(zhǔn)備上傳的latest版本(需要版本號(hào)可指定)
docker commit 2ca8f61a3e0f 用戶名/倉(cāng)庫(kù)名
此時(shí)鏡像的latest版本已經(jīng)生成,可以通過(guò)docker images查看生成的鏡像名稱和版本,準(zhǔn)備上傳戈稿。
上傳之前需要登錄剛剛注冊(cè)的賬號(hào)使用docker login登錄即可
開(kāi)始上傳
docker pull 鏡像名稱:版本
當(dāng)當(dāng)當(dāng)當(dāng)西土!成功啦(如果pull超時(shí)失敗多嘗試幾次就好啦)。