Docker部署Golang程式方法
之前我寫過 ofollow,noindex">如何部署Golang程式到伺服器 ,這次咱們來寫寫怎麼利用Docker來部署我的Golang,當然如果要部署到 Docker
裡面, Docker
是必須安裝的,可以 點選這裡 檢視安裝步驟。
文/謙益
這篇文章可能不太適合對go和 Docker
零基礎人士閱讀,需要有一定的基礎知識。
依賴知識
- Go交叉編譯基礎
- Docker基礎
- Dockerfile自定義映象基礎
- docker-compose編排檔案編寫基礎
當然,一點也不會也可以按照這個步驟部署完成,不過可能中間如果出點小問題,會不知道怎麼解決,當然你也可以留言。
我是在mac環境上開發測試的,如果你是在windows上可能有一點出入,但應該不會有啥大問題。
一、依賴環境
- Docker
二、編寫一個GoLang web程式
我這裡就寫一個最簡單的hello world程式吧,監聽埠是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("【預設專案】服務啟動成功 監聽埠 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
檔案,再在裡面新建 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
這是對方開發的埠,我預設是開放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
。

看到上面這個輸出,就說明編譯成功了,在你的本地映象裡面就有了一個名為 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 -a
來檢視下是否啟動成功了,如果看到下面的這個輸出說明就啟動成功了。

你現在就可以訪問你們 http://127.0.0.1:8099
就能訪問我們的go程式了。
下一期文章主題會寫怎麼用 Docker
+ Nginx
部署 Go 應用程式,敬請期待。