docker 命令:
docker run --rm -v "$PWD":/go/src/github.com/ymmb/test --privileged=true -w /go/src/github.com/ymmb/test golang:1.8.3 go build -v -o test
1.第一次執行會從本地先查找golang:1.8.3鏡像,如果沒有找到,會從dockerhub上下載該鏡像;
如果找到則直接生成container,然后在docker中進行編譯,並生成可執行文件。
2.docker run --rm:先從鏡像 golang:1.8.3 生成 container, 執行完成后刪除 docker 環境,
但是在docker中執行 go build -v -o test 后生成的 test 可執行文件會保留。
3.如果該服務調用了vendor包,則當前目錄下必須要vendor目錄和包文件,
gopath 路徑下也不行,執行 docker必須在main.go的目錄下
命令解析:
-v "$PWD":/go/src/github.com/ymmb/test: 將本地的文件夾 "PWD" 和 docker 中
/go/src/github.com/ymmb/test 進行軟連接關聯(自動生成該目錄),這樣 docker 中 test 目錄和本地 "PWD" 的目錄就是一個了。
--privileged=true:privileged 使 container 內的 root 擁有真正的 root 權限,如不加該命令,
則沒有寫入 container 和外界關聯目錄的權限(踩了這塊的坑,docker 執行完成后就是沒有保留可執行文件)。
-w /go/src/github.com/ymmb/test:設置容器的工作目錄. (docker 中的默認 GOPATH: /go/src/,
應當和 -v 所指定的 docker 中的目錄一致,並在 -v 關聯的 container 外執行該 docker 命令)
go build -v:可以使命令把執行過程中構建的包名打印出來。
(想要在 docker 中執行的命令,可以是 shell 或其他,這里是執行 go 的編譯命令)
