基於 Docker 映象部署 go 專案

程式設計師的貓發表於2020-07-02

依賴知識
Go交叉編譯基礎
Docker基礎
Dockerfile自定義映象基礎
docker-compose編排檔案編寫基礎

一、依賴環境
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: '3'
services:
  world:
    container_name: world
    image: go-web
    ports:
      - "8080:80"
    volumes:
      - ./app/go/world:/go/src/app:rw

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

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

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

Creating world ... done

啟動成功後你可以再用

docker ps

來檢視下是否啟動成功了。

現在訪問127.0.0.1:8080 就能訪問我們的go程式了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

你還差得遠吶!

相關文章