您好,登錄后才能下訂單哦!
小編這次要給大家分享的是Docker鏡像怎么部署go項(xiàng)目,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
依賴知識(shí)
當(dāng)然,一點(diǎn)也不會(huì)也可以按照這個(gè)步驟部署完成,不過可能中間如果出點(diǎn)小問題,會(huì)不知道怎么解決,當(dāng)然你也可以留言。
我是在mac環(huán)境上開發(fā)測試的,如果你是在windows上可能有一點(diǎn)出入,但應(yīng)該不會(huì)有啥大問題。
一、依賴環(huán)境
二、編寫一個(gè)GoLang web程序
我這里就寫一個(gè)最簡單的hello world程序吧,監(jiān)聽端口是80端口。
新建一個(gè)main.go
文件,內(nèi)容如下:
package main import ( "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)聽端口 80") er := http.ListenAndServe("0.0.0.0:80", nil) if er != nil { log.Fatal("ListenAndServe: ", er) } }
三、編譯成linux下的程序包
我是在mac上開發(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
文件,再在里面新建app
,script
兩個(gè)文件。把上一步的main
程序放到app
文件夾里面,在script
里面新建一個(gè)build.sh
腳本文件,文件內(nèi)容先不管,等下會(huì)說。
具體的文件結(jié)構(gòu)是這樣。
. ├── Dockerfile ├── app │ └── main └── script └── build.sh
下面就是編寫Dockerfile
文件內(nèi)容了,內(nèi)容我先上代碼:
FROM golang MAINTAINER 謙益 WORKDIR /go/src/ COPY . . EXPOSE 80 CMD ["/bin/bash", "/go/src/script/build.sh"]
這里解釋下:
FROM
是集成自哪個(gè)鏡像,我們是go程序官方提供了一個(gè)golang
這樣的鏡像,我們可以直接使用。
MAINTAINER
是維護(hù)這名字。
WORKDIR
工作目錄。
COPY
這是一個(gè)復(fù)制命令,把本地的所有文件復(fù)制到工作目錄下。
EXPOSE
這是對(duì)方開發(fā)的端口,我默認(rèn)是開放80端口,這里可根據(jù)實(shí)際情況修改
CMD
執(zhí)行一個(gè)帶參數(shù)的命令,我這樣寫,是為了讓鏡像啟動(dòng)時(shí)去執(zhí)行script/build.sh
的腳本,這個(gè)腳本里面是寫的啟動(dòng)go程序的命令。
這里我把內(nèi)容粘貼出來:
#!/usr/bin/env bash cd /go/src/app/ && ./main
就這兩行。
五、編譯我們自己的鏡像
這屬于Docker
的知識(shí)了,我把命令粘貼出來。
docker build -t go-web .
golang
這個(gè)鏡像的話,他會(huì)自己先去官方鏡像庫拉取這個(gè)鏡像再編譯,我們靜靜的等他就行go-web
這個(gè)參數(shù)是你最后編譯后的鏡像名字,可以隨意修改,也可以加上版本號(hào)比如: go-web:v1
。看到上面這個(gè)輸出,就說明編譯成功了,在你的本地鏡像里面就有了一個(gè)名為go-web
的鏡像??梢允褂?docker images
進(jìn)行查詢:
六、編寫 docker-compose.yml 文件
到這里屬于我們的最后一步了,如果用我們剛編譯的go-web
來運(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àn)在只需要用docker-compose
來啟動(dòng)我們的編排文件就好,啟動(dòng)命令如下:
docker-compose -f docker-compose.yml up -d world
如果輸出下面的提示,說明啟動(dòng)成功了。
Creating world ... done
啟動(dòng)成功后你可以再用
docker ps
來查看下是否啟動(dòng)成功了。
現(xiàn)在訪問http://127.0.0.1:8099
就能訪問我們的go程序了。
看完這篇關(guān)于Docker鏡像怎么部署go項(xiàng)目的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。