基于Docker鏡像部署go項目的方法步驟
依賴知識
- Go交叉編譯基礎
- Docker基礎
- Dockerfile自定義鏡像基礎
- docker-compose編排文件編寫基礎
當然,一點也不會也可以按照這個步驟部署完成,不過可能中間如果出點小問題,會不知道怎么解決,當然你也可以留言。
我是在mac環(huán)境上開發(fā)測試的,如果你是在windows上可能有一點出入,但應該不會有啥大問題。
一、依賴環(huán)境
- Docker
二、編寫一個GoLang web程序
我這里就寫一個最簡單的hello world程序吧,監(jiān)聽端口是80端口。
新建一個main.go文件,內容如下:
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)//注冊URI路徑與相應的處理函數
log.Println("【默認項目】服務啟動成功 監(jiān)聽端口 80")
er := http.ListenAndServe("0.0.0.0:80", nil)
if er != nil {
log.Fatal("ListenAndServe: ", er)
}
}
三、編譯成linux下的程序包
我是在mac上開發(fā)的,需要用到go的交叉編譯,如果對交叉編譯不熟悉的,可以查下文檔,或者直接復制我下面的命令進行編譯。
我們是要跑在Docker里面,基礎 golang這個鏡像跑的,所以需要把他編譯成兼容 i386 處理器的程序。
sudo env GOOS=linux GOARCH=386 go build main.go
這個編譯完成后,本地會多出一個 main 程序,暫時不用管它備用就行。
四、使用 Dockerfile 定制我們go程序的鏡像
新建一個文件夾,里面新建一個Dockerfile文件,再在里面新建app,script兩個文件。把上一步的main程序放到app文件夾里面,在script里面新建一個build.sh腳本文件,文件內容先不管,等下會說。
具體的文件結構是這樣。
. ├── Dockerfile ├── app │ └── main └── script └── build.sh
下面就是編寫Dockerfile文件內容了,內容我先上代碼:
FROM golang MAINTAINER 謙益 WORKDIR /go/src/ COPY . . EXPOSE 80 CMD ["/bin/bash", "/go/src/script/build.sh"]
這里解釋下:
FROM 是集成自哪個鏡像,我們是go程序官方提供了一個golang這樣的鏡像,我們可以直接使用。
MAINTAINER 是維護這名字。
WORKDIR 工作目錄。
COPY 這是一個復制命令,把本地的所有文件復制到工作目錄下。
EXPOSE 這是對方開發(fā)的端口,我默認是開放80端口,這里可根據實際情況修改
CMD 執(zhí)行一個帶參數的命令,我這樣寫,是為了讓鏡像啟動時去執(zhí)行script/build.sh的腳本,這個腳本里面是寫的啟動go程序的命令。
這里我把內容粘貼出來:
#!/usr/bin/env bash cd /go/src/app/ && ./main
就這兩行。
五、編譯我們自己的鏡像
這屬于Docker的知識了,我把命令粘貼出來。
docker build -t go-web .
- 這個命令執(zhí)行,如果本地沒有
golang這個鏡像的話,他會自己先去官方鏡像庫拉取這個鏡像再編譯,我們靜靜的等他就行 go-web這個參數是你最后編譯后的鏡像名字,可以隨意修改,也可以加上版本號比如:go-web:v1。

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

六、編寫 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鏡像部署go項目的方法步驟的文章就介紹到這了,更多相關Docker鏡像部署go項目內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker中搭建FastDFS文件系統(tǒng)(多圖教程)
這篇文章主要介紹了Docker中搭建FastDFS文件系統(tǒng)(多圖教程),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
使用GoogleContainerTools容器化jib構建docker鏡像
這篇文章主要教大家如何使用GoogleContainerTools容器化jib構建docker鏡像的實現,有需要的的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步2022-03-03
windows壞境下docker使用phpmyamin的權限問題解決
這篇文章主要為大家介紹了windows壞境下docker使用phpmyamin發(fā)生的權限問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Docker查看鏡像的Dockerfile(docker history和docker inspec
這篇文章主要給大家介紹了關于Docker查看鏡像的Dockerfile的相關資料,文中主要運用的是docker history和docker inspect命令,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05
docker創(chuàng)建并運行一個MySql容器,并將宿主機直接掛載到容器
這篇文章主要介紹了docker創(chuàng)建并運行一個MySql容器,并將宿主機直接掛載到容器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
在Ubuntu上使用Grafana監(jiān)控Docker的方法
如今越來越多的公司開始使用Docker,一談起Docker總是會跟著讓人聯(lián)想到輕量這個詞,甚至會有一種通過Docker啟動一個服務會節(jié)省很多資源的錯覺。然而Docker的「輕」也只是相對于傳統(tǒng)虛擬機而已。Docker如何監(jiān)控呢?本文就給大家介紹在Ubuntu上如何使用Grafana監(jiān)控Docker。2016-12-12

