搜尋
首頁運維Docker基於Docker鏡像部署go專案(實例詳解)

這篇文章為大家帶來了基於docker映像部署go專案的相關知識,其中包括編寫GoLang web程式、編譯linux下的程式包的相關問題,希望對大家有幫助。

基於Docker鏡像部署go專案(實例詳解)

依賴知識

  • Go交叉編譯基礎
  • Docker基礎
  • Dockerfile自訂映像基礎
  • docker-compose編排檔案編寫基礎

當然,一點也不會也可以按照這個步驟部署完成,不過可能中間如果出點小問題,會不知道怎麼解決,當然你也可以留言。

我是在mac環境上開發測試的,如果你是在windows上可能有一點出入,但應該不會有啥大問題。

一、依賴環境

  • Docker

二、寫一個GoLang web程式

我這裡就寫一個最簡單的hello world程式吧,監聽埠是80埠。
新建一個main.go文件,內容如下:

package mainimport (
    "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文件,再在裡面新建appscript兩個檔案。把上一步的main程式放到app資料夾裡面,在script裡面新建一個build.sh腳本文件,檔案內容先不管,等下會說。
具體的文件結構是這樣。

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

下面就是寫Dockerfile檔案內容了,內容我先上程式碼:

FROM golang
MAINTAINER  青羽
WORKDIR /go/src/COPY . .EXPOSE 80CMD ["/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

基於Docker鏡像部署go專案(實例詳解)

看到上面這個輸出,就表示編譯成功了,在你的本地鏡像裡面就有了一個名為go-web的鏡像。可以使用docker images 進行查詢:

基於Docker鏡像部署go專案(實例詳解)

#六、編寫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影片教學

以上是基於Docker鏡像部署go專案(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
Docker:用於可移植性和可擴展性的容器化應用程序Docker:用於可移植性和可擴展性的容器化應用程序Apr 16, 2025 am 12:09 AM

Docker是一種基於Linux容器技術的工具,用於打包、分發和運行應用,提升應用的可移植性和可擴展性。 1)通過dockerbuild和dockerrun命令,可以構建和運行Docker容器。 2)DockerCompose用於定義和運行多容器的Docker應用,簡化微服務管理。 3)使用多階段構建可以優化鏡像大小,提升應用啟動速度。 4)查看容器日誌是調試容器問題的有效方法。

docker怎麼啟動容器docker怎麼啟動容器Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker怎麼查看日誌docker怎麼查看日誌Apr 15, 2025 pm 12:24 PM

查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

docker容器名稱怎麼查docker容器名稱怎麼查Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

docker怎麼創建容器docker怎麼創建容器Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

docker怎麼退出容器docker怎麼退出容器Apr 15, 2025 pm 12:15 PM

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

docker內的文件怎麼拷貝到外面docker內的文件怎麼拷貝到外面Apr 15, 2025 pm 12:12 PM

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

docker怎麼啟動mysqldocker怎麼啟動mysqlApr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)