真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Docker中怎么搭建Golang開發(fā)環(huán)境

今天就跟大家聊聊有關(guān)Docker中怎么搭建Golang開發(fā)環(huán)境,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),沙坡頭網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:沙坡頭等地區(qū)。沙坡頭做網(wǎng)站價(jià)格咨詢:13518219792


獲取Docker鏡像
我們使用官方最新穩(wěn)定版的鏡像 golang:latest, 獲取鏡像前先得確保你電腦上運(yùn)行了 Docker 客戶端,沒有的去官網(wǎng)下載一下吧這里就不多說了。
下載dockerHub上的鏡像直接使用命令:
docker pull golang
下載完鏡像后用鏡像運(yùn)行一個(gè)容器:
docker run --rm -it --name go-http-demo golang bash
上面這個(gè)命令用鏡像 golang創(chuàng)建了一個(gè)名為 go-http-demo的容器,在容器中創(chuàng)建了一個(gè) Bash會(huì)話。--rm選項(xiàng)指定容器退出后自動(dòng)移除容器。
運(yùn)行完上面的命令后我們就進(jìn)入了運(yùn)行的容器中,運(yùn)行 go version 查看以下 go的版本:
[email protected]:/go# go version
go version go1.13.6 linux/amd64
[email protected]:/go#
你可以根據(jù)自己的需要在https://hub.docker.com/_/golang 中查找自己需要的版本的 golang鏡像運(yùn)行容器。
在容器中運(yùn)行Go項(xiàng)目
我們使用《深入學(xué)習(xí)用Go編寫HTTP服務(wù)器》中最后寫的支持優(yōu)雅關(guān)停服務(wù)的 HTTPServer的源碼,將它放到 Docker容器里伺服宿主機(jī)的請(qǐng)求。HTTP Server的源碼如下,想探究代碼具體怎么實(shí)現(xiàn)的看鏈接里的文章就好了。

package mainimport (    "context"    "fmt"    "log"    "net/http"    "os"    "os/signal"    "syscall")func main() {    mux := http.NewServeMux()    mux.Handle("/", &helloHandler{})    server := &http.Server{        Addr:    ":8080",        Handler: mux,    }    // 創(chuàng)建系統(tǒng)信號(hào)接收器    done := make(chan os.Signal)    signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)    go func() {        <-done        if err := server.Shutdown(context.Background()); err != nil {            log.Fatal("Shutdown server:", err)        }    }()    log.Println("Starting HTTP server...")    err := server.ListenAndServe()    if err != nil {        if err == http.ErrServerClosed {            log.Print("Server closed under request")        } else {            log.Fatal("Server closed unexpected")        }    }}type helloHandler struct{}func (*helloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hello World")}

把源碼放在本地電腦的 /Code/go/src/example.com/http-demo/main.go中,文件目錄你們做的時(shí)候根據(jù)自己的情況寫路徑。
接下來就要把這個(gè)代碼放到容器里去運(yùn)行了,切到代碼目錄里執(zhí)行如下命令:

docker run --rm -it --name go-http-demo \  -v $PWD:/go/src/example.com/go-http-demo \  -p 8000:8080  golang

-v選項(xiàng)允許我們掛載多個(gè)本地目錄或者數(shù)據(jù)卷到容器中,更改會(huì)在容器內(nèi)外相互同步,上面的命令將 /Code/go/src/example.com/go-http-demo/掛載到了容器的 /go/src/example.com/go-http-demo。
-p指定主機(jī)和容器的端口映射,因?yàn)榇a里 HTTP服務(wù)是監(jiān)聽 8080端口的,所以我們將主機(jī)的 8000端口和容器的 8080端口做了映射。
執(zhí)行完上面的命令,我們切換到到容器里的 Bash會(huì)話,切到代碼目錄運(yùn)行 go run main.go后,在自己的電腦上打開瀏覽器訪問 http:localhost:8080看到下圖中的頁面就證明服務(wù)器在容器里已經(jīng)正常運(yùn)行起來了。

用docker-compose管理容器
通過上面的內(nèi)容我們已經(jīng)用 Docker構(gòu)建好了一個(gè) Go的開發(fā)環(huán)境,不過每次打那堆命令,還要進(jìn)容器執(zhí)行 go命令啟動(dòng)程序太費(fèi)事了,我們用 docker-compose把上面那些流程自動(dòng)化一下。
在項(xiàng)目代碼根目錄創(chuàng)建 docker-compose.yml:

version: '3'services:  app:    image: golang:latest    volumes:      - $PWD:/go/src/examplecom/http_demo    ports:      - "8000:8080"    command: go run /go/src/examplecom/http_demo/main.go

如果你們項(xiàng)目里不允許就找個(gè)目錄放這個(gè)文件,我自己就是單獨(dú)有個(gè)目錄里面放了好幾個(gè)項(xiàng)目的 Docker配置文件,有 PHP項(xiàng)目的也有 Go項(xiàng)目的。
上面的編排文件里只定義了一個(gè)叫 app的服務(wù),其他的也很容易理解我就不說了,唯一要注意的一點(diǎn)就是如果 yml文件在項(xiàng)目外 volumes里的配置就換成絕對(duì)路徑不要用 $PWD了
接下來啟動(dòng) docker-compose:
docker-compose up -d
如果啟動(dòng)不成功先不要在 daemon模式下運(yùn)行把 -d去掉,就能看到具體什么錯(cuò)誤,等調(diào)試正常了再后臺(tái)啟動(dòng)。
代碼有修改后,需要重新編譯項(xiàng)目,針對(duì)我們的容器執(zhí)行下面的命令即可
docker-compose restart
想要進(jìn)入運(yùn)行的容器中執(zhí)行操作使用命令:
docker exec -it bash
給我們創(chuàng)建的 app發(fā)送 go test命令讓它在容器內(nèi)執(zhí)行:
docker-compose exec app go test

看完上述內(nèi)容,你們對(duì)Docker中怎么搭建Golang開發(fā)環(huán)境有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)站標(biāo)題:Docker中怎么搭建Golang開發(fā)環(huán)境
標(biāo)題URL:http://weahome.cn/article/ghsgjo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部