站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        基于Docker鏡像部署go項(xiàng)目(實(shí)例詳解)

        本篇文章給大家?guī)?lái)了基于docker鏡像部署go項(xiàng)目的相關(guān)知識(shí),其中包括編寫(xiě)GoLang web程序、編譯linux下的程序包的相關(guān)問(wèn)題,希望對(duì)大家有幫助。

        基于Docker鏡像部署go項(xiàng)目(實(shí)例詳解)

        依賴知識(shí)

        • Go交叉編譯基礎(chǔ)
        • Docker基礎(chǔ)
        • Dockerfile自定義鏡像基礎(chǔ)
        • docker-compose編排文件編寫(xiě)基礎(chǔ)

        當(dāng)然,一點(diǎn)也不會(huì)也可以按照這個(gè)步驟部署完成,不過(guò)可能中間如果出點(diǎn)小問(wèn)題,會(huì)不知道怎么解決,當(dāng)然你也可以留言。

        我是在mac環(huán)境上開(kāi)發(fā)測(cè)試的,如果你是在windows上可能有一點(diǎn)出入,但應(yīng)該不會(huì)有啥大問(wèn)題。

        一、依賴環(huán)境

        • Docker

        二、編寫(xiě)一個(gè)GoLang web程序

        我這里就寫(xiě)一個(gè)最簡(jiǎn)單的hello world程序吧,監(jiān)聽(tīng)端口是80端口。
        新建一個(gè)main.go文件,內(nèi)容如下:

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

        三、編譯成linux下的程序包

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

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

        這個(gè)編譯完成后,本地會(huì)多出一個(gè) main 程序,暫時(shí)不用管它備用就行。

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

        新建一個(gè)文件夾,里面新建一個(gè)Dockerfile文件,再在里面新建appscript兩個(gè)文件。把上一步的main程序放到app文件夾里面,在script里面新建一個(gè)build.sh腳本文件,文件內(nèi)容先不管,等下會(huì)說(shuō)。
        具體的文件結(jié)構(gòu)是這樣。

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

        下面就是編寫(xiě)Dockerfile文件內(nèi)容了,內(nèi)容我先上代碼:

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

        這里解釋下:

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

        就這兩行。

        五、編譯我們自己的鏡像

        這屬于Docker的知識(shí)了,我把命令粘貼出來(lái)。

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

        基于Docker鏡像部署go項(xiàng)目(實(shí)例詳解)

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

        基于Docker鏡像部署go項(xiàng)目(實(shí)例詳解)

        六、編寫(xiě) docker-compose.yml 文件

        到這里屬于我們的最后一步了,如果用我們剛編譯的go-web來(lái)運(yùn)行我們的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

        到這里我們的編排文件已經(jīng)寫(xiě)好了,現(xiàn)在只需要用docker-compose來(lái)啟動(dòng)我們的編排文件就好,啟動(dòng)命令如下:

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

        如果輸出下面的提示,說(shuō)明啟動(dòng)成功了。

        Creating world ... done

        啟動(dòng)成功后你可以再用

        docker ps

        來(lái)查看下是否啟動(dòng)成功了。

        現(xiàn)在訪問(wèn)http://127.0.0.1:8099 就能訪問(wèn)我們的go程序了。

        推薦學(xué)習(xí):《docker視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 91人前露出精品国产| 国产精品一区三区| 91亚洲国产成人久久精品| 欧美日韩人妻精品一区二区在线| 国产三级精品三级在线观看专1 | 久久夜色精品国产噜噜亚洲AV| 国内精品视频九九九九| 国产精品高清一区二区三区不卡| 亚洲欧美日韩国产精品| 精品亚洲一区二区三区在线观看| 日韩精品一区二区三区四区 | 999久久久无码国产精品| 亚洲精品二区国产综合野狼| 久久久人妻精品无码一区| 国产欧美精品专区一区二区 | 国产产无码乱码精品久久鸭| 亚洲日韩精品A∨片无码| 免费人成在线观看欧美精品| 国产精品嫩草影院久久| 欧美高清在线精品一区| 91在线视频精品| 无码国产69精品久久久久网站| 亚洲国产精品一区二区三区久久| 精品中文高清欧美| 国产三级精品久久| 国产精品毛片无码| 国产精品成人h片在线| 国产精品爱搞视频网站| 国产成人精品a视频一区| 高清在线国产午夜精品| 国产91精品黄网在线观看| 91久久精品视频| 91亚洲精品麻豆| 99riav国产精品| 国产精品视频色视频| 国产精品亚洲综合专区片高清久久久 | 日韩在线精品一二三区| 欧美精品国产一区二区三区| 午夜一级日韩精品制服诱惑我们这边| 亚洲第一区精品观看| 亚洲精品天堂成人片?V在线播放|