Docker分享-CI/CD之路

我本來只想看看docker官方提供的CI/CD教程小泉,然后官方引用了脖捻,Ben's blog提到了CI/CD的最佳實踐愈诚,然后我就去閱讀了大神的博客荣堰,然后大神引用了另一個大神的通過docker開發(fā)你的Go程序的系列文章淹辞。OK医舆,我還挺喜歡這種引用的,那一層一層看吧象缀,肯定都是好內(nèi)容蔬将。

Chris大神說他剛開始加入開發(fā)團隊的時候,也遇到了很多編程語言央星,配置開發(fā)環(huán)境的問題霞怀,經(jīng)常需要問同事幫忙,還經(jīng)常被各種工具困擾莉给,這些過程非潮惺花費時間,并且他在維護debug CI過程的時候也非常痛苦颓遏。

他提到了一個角度我覺得很好徐矩,他說Go開發(fā)的工具鏈,提供快速編譯時間叁幢,內(nèi)置依賴管理滤灯,簡單的交叉編譯。但工具鏈會遇到諸多Go版本不匹配遥皂,缺少依賴力喷,配置不同的問題。一個很好的例子就是在許多項目中使用了gRPC演训,因此特定版本的protoc也很重要弟孟。

大神的博客涵蓋了構建,測試样悟,CI和優(yōu)化方案幫助大家更快上手拂募。

迎接究極干貨

從簡單的go程序開始:

package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

通過go build就可以編譯成二進制文件庭猩。

go build -o bin/example .

外加簡單的Dockerfile

FROM golang:1.14.3-alpine As build
WORKDIR /src
COPY . .
RUN go build -o /out/example .
FROM scratch AS bin
COPY --from=build /out/example /

說簡單也不簡單,兩階段構建陈症,第一階段蔼水,構建,用了Go Alpine鏡像录肯,Alpine鏡像大家了解吧趴腋,很多語言都有這個版本,超級輕量化论咏,常規(guī)機遇Debian的Golang輕量鏡像代替品优炬。定義了go的版本(我這個時候還在想,要不要做一個新版本的用例)厅贪。設置了工作目錄蠢护,將代碼復制到容器中,然后編譯养涮。第二階段使用了臨時的空鏡像(這個我頭次見)然后將第一階段的編譯好的耳機只文件復制到文件系統(tǒng)中葵硕。大神貼心的提到,如果我們的程序需要一些其他的資源比如CA證書贯吓,這些也需要包含在最終的鏡像中懈凹。

小tips:
我之前使用Alpine鏡像的時候,我們是不用跑docker run -it < image_id > bash的宣决,因為Alpine不帶蘸劈,那怎么進一個CLI呢?可以用/bin/sh尊沸。

升級版(交叉編譯版)

FROM --platform=${BUILDPLATFORM} golang:1.14.3-alpine AS build
WORKDIR /src
ENV CGO_ENABLED=0
COPY . .
ARG TARGETOS
ARG TARGETARCH
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM scratch AS bin
COPY --from=build /out/example /

使用了BUILDPLATFORM設置基礎鏡像平臺威沫。使用TARGETOS和TARGETARCH告訴Go在那個平臺構建。

大神還提供了Makefile洼专,makfile我還沒有學過多語法棒掠,一起看看吧

all: bin/example
.PHONY: bin/example
bin/example:
    @docker build . --target bin --output bin/ --platform local

使用make,或者make bin/example都能構建屁商。

再進一步

FROM --platform=${BUILDPLATFORM} golang:1.14.3-alpine AS build
WORKDIR /src
ENV CGO_ENABLED=0
COPY . .
ARG TARGETOS
ARG TARGETARCH
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM scratch AS bin-unix
COPY --from=build /out/example /

FROM bin-unix AS bin-linux
FROM bin-unix AS bin-darwin

FROM scratch AS bin-windows
COPY --from=build /out/example /example.exe

FROM bin-${TARGETOS} AS bin

這已經(jīng)多階段方案了吧烟很,Linux(bin-linux),macOS(bin-darwin),windows(bin-windows)。我的天真希望我不要遇到這些問題蜡镶。這些可以讓我動態(tài)選擇編譯目標雾袱。

然后再優(yōu)化Makefile

all: bin/example

PLATFORM=local

.PHONY: bin/example
bin/example:
   @docker build . --target bin --output bin/  --platform ${PLATFORM}

然后我們就可以指定使用平臺了

make PLATFORM=windows/amd64

makefile倆面的參數(shù)能這么直接傳真實學到了

還能學到一點

大神提到了使用.dcokerignore減少不需要的內(nèi)容,如果我們的項目通過git進行代碼管理官还,我覺得大多數(shù)的項目都是git管理吧芹橡,我們可以排出.git/目錄, 這一點再docker官網(wǎng)的教程了都沒寫。

reference

本文所有的例子都來自于大神的博客: https://www.docker.com/blog/containerize-your-go-developer-environment-part-1/

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末望伦,一起剝皮案震驚了整個濱河市林说,隨后出現(xiàn)的幾起案子煎殷,更是在濱河造成了極大的恐慌,老刑警劉巖腿箩,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豪直,死亡現(xiàn)場離奇詭異,居然都是意外死亡珠移,警方通過查閱死者的電腦和手機弓乙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剑梳,“玉大人唆貌,你說我怎么就攤上這事」敢遥” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵语卤,是天一觀的道長追逮。 經(jīng)常有香客問我,道長粹舵,這世上最難降的妖魔是什么钮孵? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮眼滤,結(jié)果婚禮上巴席,老公的妹妹穿的比我還像新娘。我一直安慰自己诅需,他們只是感情好漾唉,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著堰塌,像睡著了一般赵刑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上场刑,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天般此,我揣著相機與錄音,去河邊找鬼牵现。 笑死铐懊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瞎疼。 我是一名探鬼主播科乎,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丑慎!你這毒婦竟也來了喜喂?” 一聲冷哼從身側(cè)響起瓤摧,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玉吁,沒想到半個月后照弥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡进副,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年这揣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影斑。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡给赞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矫户,到底是詐尸還是另有隱情片迅,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布皆辽,位于F島的核電站柑蛇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驱闷。R本人自食惡果不足惜耻台,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望空另。 院中可真熱鬧盆耽,春花似錦、人聲如沸扼菠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娇豫。三九已至匙姜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冯痢,已是汗流浹背氮昧。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浦楣,地道東北人袖肥。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像振劳,于是被迫代替她去往敵國和親椎组。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容