站長資訊網
        最全最豐富的資訊網站

        基于Docker鏡像部署go項目(實例詳解)

        本篇文章給大家帶來了基于docker鏡像部署go項目的相關知識,其中包括編寫GoLang web程序、編譯linux下的程序包的相關問題,希望對大家有幫助。

        基于Docker鏡像部署go項目(實例詳解)

        依賴知識

        • Go交叉編譯基礎
        • Docker基礎
        • Dockerfile自定義鏡像基礎
        • docker-compose編排文件編寫基礎

        當然,一點也不會也可以按照這個步驟部署完成,不過可能中間如果出點小問題,會不知道怎么解決,當然你也可以留言。

        我是在mac環境上開發測試的,如果你是在windows上可能有一點出入,但應該不會有啥大問題。

        一、依賴環境

        • Docker

        二、編寫一個GoLang web程序

        我這里就寫一個最簡單的hello world程序吧,監聽端口是80端口。
        新建一個main.go文件,內容如下:

        package mainimport (     "fmt"     "log"     "net/http")func sayHello(w http.ResponseWriter, r *http.Request) {     fmt.Fprintf(w, "hello world")}func main() {     http.HandleFunc("/", sayHello)//注冊URI路徑與相應的處理函數     log.Println("【默認項目】服務啟動成功 監聽端口 80")     er := http.ListenAndServe("0.0.0.0:80", nil)     if er != nil {         log.Fatal("ListenAndServe: ", er)     }}

        三、編譯成linux下的程序包

        我是在mac上開發的,需要用到go的交叉編譯,如果對交叉編譯不熟悉的,可以查下文檔,或者直接復制我下面的命令進行編譯。
        我們是要跑在Docker里面,基礎 golang這個鏡像跑的,所以需要把他編譯成兼容 i386 處理器的程序。

        sudo env GOOS=linux GOARCH=386 go build main.go

        這個編譯完成后,本地會多出一個 main 程序,暫時不用管它備用就行。

        四、使用 Dockerfile 定制我們go程序的鏡像

        新建一個文件夾,里面新建一個Dockerfile文件,再在里面新建appscript兩個文件。把上一步的main程序放到app文件夾里面,在script里面新建一個build.sh腳本文件,文件內容先不管,等下會說。
        具體的文件結構是這樣。

        . ├── Dockerfile ├── app │   └── main └── script     └── build.sh

        下面就是編寫Dockerfile文件內容了,內容我先上代碼:

        FROM golang MAINTAINER  青羽 WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/bin/bash", "/go/src/script/build.sh"]

        這里解釋下:

        • FROM 是集成自哪個鏡像,我們是go程序官方提供了一個golang這樣的鏡像,我們可以直接使用。
        • MAINTAINER 是維護這名字。
        • WORKDIR 工作目錄。
        • COPY 這是一個復制命令,把本地的所有文件復制到工作目錄下。
        • EXPOSE 這是對方開發的端口,我默認是開放80端口,這里可根據實際情況修改
        • CMD 執行一個帶參數的命令,我這樣寫,是為了讓鏡像啟動時去執行script/build.sh的腳本,這個腳本里面是寫的啟動go程序的命令。
          這里我把內容粘貼出來:
        #!/usr/bin/env bash cd /go/src/app/ && ./main

        就這兩行。

        五、編譯我們自己的鏡像

        這屬于Docker的知識了,我把命令粘貼出來。

        docker build -t go-web .
        • 這個命令執行,如果本地沒有 golang 這個鏡像的話,他會自己先去官方鏡像庫拉取這個鏡像再編譯,我們靜靜的等他就行。
        • go-web這個參數是你最后編譯后的鏡像名字,可以隨意修改,也可以加上版本號比如: go-web:v1

        基于Docker鏡像部署go項目(實例詳解)

        看到上面這個輸出,就說明編譯成功了,在你的本地鏡像里面就有了一個名為go-web的鏡像。可以使用 docker images 進行查詢:

        基于Docker鏡像部署go項目(實例詳解)

        六、編寫 docker-compose.yml 文件

        到這里屬于我們的最后一步了,如果用我們剛編譯的go-web來運行我們的go程序:

        version: '2'networks:   basic:services:   world:     container_name: world     image: go-web     ports:       - "8099:80"     volumes:       - ./app/go/world:/go/src/app:rw     networks:       - basic

        到這里我們的編排文件已經寫好了,現在只需要用docker-compose來啟動我們的編排文件就好,啟動命令如下:

        docker-compose -f docker-compose.yml up -d world

        如果輸出下面的提示,說明啟動成功了。

        Creating world ... done

        啟動成功后你可以再用

        docker ps

        來查看下是否啟動成功了。

        現在訪問http://127.0.0.1:8099 就能訪問我們的go程序了。

        推薦學習:《docker視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品自拍一区| 国産精品久久久久久久| 久久99精品国产一区二区三区 | 精品国产一区二区三区色欲| 国产精品无码无卡无需播放器| 99在线精品一区二区三区| 青草青草久热精品视频在线观看| 欧美性videofree精品| 国产精品亚洲精品日韩已满| 亚洲精品麻豆av| 欧美精品成人3d在线| 国产精品国产三级国产AⅤ| 九九热这里只有在线精品视| 国产办公室秘书无码精品99| 久久久久99精品成人片试看| 亚洲精品无码MV在线观看| 久久亚洲国产精品五月天婷| 精品一区二区三区在线观看 | 国产精品爱搞视频网站| 欧美精品在线一区二区三区| 国产精品久久免费| av国内精品久久久久影院| 精品欧洲av无码一区二区三区| 无码精品人妻一区二区三区免费看 | 精品人妻伦一二三区久久| 国产精品热久久毛片| 国产精品户外野外| 国产精品成人99久久久久91gav| 最新国产精品亚洲| 99国产精品国产免费观看| 夜色www国产精品资源站| 亚洲精品成人av在线| 国产精品99久久久久久宅男| 91精品国产品国语在线不卡| 国产成人精品cao在线| 国产av无码专区亚洲国产精品| 国产精品亚洲欧美大片在线看| 精品国产乱码久久久久久浪潮| 久久久亚洲精品蜜桃臀| 亚洲国产成人精品91久久久| 亚洲精品无码永久中文字幕|