久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Docker中怎么搭建Golang開發環境

138次閱讀
沒有評論

共計 2688 個字符,預計需要花費 7 分鐘才能閱讀完成。

今天就跟大家聊聊有關 Docker 中怎么搭建 Golang 開發環境,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

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

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,    }    // 創建系統信號接收器    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 中,文件目錄你們做的時候根據自己的情況寫路徑。
接下來就要把這個代碼放到容器里去運行了,切到代碼目錄里執行如下命令:

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

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

用 docker-compose 管理容器
通過上面的內容我們已經用 Docker 構建好了一個 Go 的開發環境,不過每次打那堆命令,還要進容器執行 go 命令啟動程序太費事了,我們用 docker-compose 把上面那些流程自動化一下。
在項目代碼根目錄創建 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

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

看完上述內容,你們對 Docker 中怎么搭建 Golang 開發環境有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計2688字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 鲁山县| 将乐县| 广宗县| 图木舒克市| 喀喇沁旗| 扎赉特旗| 甘孜| 班戈县| 肥西县| 岢岚县| 洱源县| 朝阳县| 酒泉市| 土默特右旗| 镇宁| 河北省| 上饶县| 长白| 凤翔县| 丰台区| 如皋市| 新郑市| 黄梅县| 离岛区| 都江堰市| 武邑县| 诏安县| 潜江市| 富裕县| 朝阳县| 丘北县| 龙州县| 龙泉市| 延川县| 醴陵市| 青海省| 柘荣县| 旬邑县| 巴林右旗| 青川县| 临猗县|