Docker最全教程 從理論到實戰(十六)

2022-06-10 05:27:09 字數 3521 閱讀 3877

go(又稱golang)是google開發的一種靜態強型別、編譯型、並髮型,並具有垃圾**功能的程式語言。在2023年,go被軟體評價公司tiobe 選為「tiobe2016 年最佳語言」。

和其他語言的規定相比,在go中有幾項不同的強制的規定,當不匹配以下規定時編譯將會產生錯誤:

相比其他語言,go語言主要有以下優勢:

go的效能強勁,但是又比c/c++的開發效率高(go語言的開發者很多都是從c/c++轉換過來的,上手幾乎沒門檻),維護成本更低,同時開發效率又不弱於python等動態語言,而且還支援編譯,可能減少很多低階錯誤。除此之外,go還有個很大的優勢,go和.net core一樣,講的好聽一點呢,就是出身名門、血統純正,講的不好聽一點呢,都是富二代,都有乙個好爹。

我們的系列教程的主角docker,就是基於go語言編寫。由於以上一些特性,go特別適合雲計算相關服務開發(關於這一點,大家可以關注各大雲廠商的開源專案)、伺服器程式設計、分布式系統、網路程式設計、記憶體資料庫等等。

由於爹好,所以官方文件比較詳細:

同樣,我們可以使用docker images golang命令來檢視相關映象。這裡值得注意的是,一般情況下,請使用帶有alpine標籤的golang映象,因為體積更小。

接下來,我們使用go編寫乙個簡單的demo:即通過釘釘機械人webhooks推送訊息到釘釘。

目前釘釘已經普遍應用於辦公領域,通過對接釘釘機械人,我們可以將一些希望相關團隊關注的資訊推送到相應的釘釘群。

在開始之前,我們需要對釘釘機械人有個大致的了解:

這裡我們是使用自定義機械人。當前自定義機械人支援文字 (text)、連線 (link)、markdown (markdown)、actioncard、feedcard訊息型別,我們可以根據自己的使用場景選擇合適的訊息型別,達到最好的展示樣式。例如我們用的比較多的是markdown型別:

我們暫且定義文字和markdown型別:

我們可以通過環境變數來傳參。

//環境變數

varenvlist = string

//獲取環境變數

)

關鍵**如下所示:

dockerfile如下所示:

from golang:1.10-alpineasbuilder

workdir /go/src/component-dingding

copy .//go/src/component-dingding

run set -ex&& \

go build -v -o/go/bin/component-dingding \

-gcflags'-n -l'\

./*.go

from alpine

run apk update&& apk add ca-certificates

copy --from=builder/go/bin/component-dingding /usr/bin/

cmd ["component-dingding"]

#注意不要單獨使用maintainer指令,maintainer已被label標籤代替

label maintainer ="[email protected]"

# label指令用於將元資料新增到映象,支援鍵值對和json,我們可以使用docker inspect命令來檢視

label dingtalkcomponent=',\

,\,\,\\

]\}'

這裡我們使用了標籤來說明引數,我們可以使用以下命令來檢視標籤:

編譯出來的映象非常小,使用了分階段構建,因為alpine的映象非常小,而go可以直接編譯成機器**:

看到這個大小,是不是相對驚詫呢!!其實.net core也支援,需要用到corert(.net core runtime,c++的效能,.net的生產力),不過目前雖然可用,但是還不算完全成熟。有興趣的可以了解下官方的這個開源庫:

注意:

alpine linux 是乙個社群開發的面向安全應用的輕量級linux發行版。從上圖我們可以看到,它非常非常小,只有5m,這是其最大的優勢。因此,其非常適合用來做docker映象、路由器、防火牆、vpns、voip 盒子以及伺服器的作業系統。

執行並設定環境變數推送訊息

我們使用powershell編寫簡單指令碼如下所示:

docker build --rm-f"dockerfile"-t go-dingtalk:latest .

docker run --rm -e"webhook="`

-e"message=*使用go傳送釘釘訊息。*"`

-e"is_at_all=true"`

-e"msg_type=markdown"`

-d go-dingtalk

注意:--rm用於自動清理。也就是用之即來,用完即走。

推送成功後,效果圖如下所示:

出處:

Docker最全教程 從理論到實戰(五)

本篇教程持續編寫了3個星期左右並且一直在完善 補充具體的細節和實踐,預計全部完成需要1到2個月的時間。由於編寫的過程中極其費時,並且還需要配合做一些實踐 有些實踐存在一些坑,而且極其費時費事 因此目前產出的速度已經跟不上發布的速度了,後續的發布節奏會放慢,請大家多多理解和多多包含。在這個過程中,我們...

Docker最全教程 從理論到實戰(四)

貨真價實 確保都是3700公尺海拔以上的超風乾氂牛肉,115元一斤包郵 貨真價實 低於 京東 我們不賺差價 有香辣 五香兩種口味,三斤氂牛肉才能做出一斤超風乾牛肉!希望這個冬天,我們能夠給他們一點點溫暖!有購買意向的朋友可以聯絡博主。建立了dockerfile之後,需為應用程式中的每項服務建立乙個相...

Docker最全教程 從理論到實戰(二十三)

傳統it往往都會過度購買配置,甚至上一年都有計畫下一年需要購買的虛擬機器和儲存資源,往往都會超買,造成了很多不必要的消費 雲資源一經購買,無論是否使用,均會按時收費 在雲端,k8s擁有極高的擴充套件性 自動化和可伸縮性,我們完全可以對雲資源按量付費並且設定設定自動伸縮。比如雲端的k8s集群,我們可以...