這是很簡(jiǎn)單的Go的程序。它首先會(huì)引入兩個(gè)包,一個(gè)是官方包,一個(gè)是外部包,它需要包管理依賴(lài)工具來(lái)引用到。這個(gè)數(shù)主函數(shù),它做的就是先建一個(gè)http,然后通過(guò)官方里的App功能把這個(gè)啟動(dòng)起來(lái),然后在1234端口打開(kāi)??梢钥吹竭@個(gè)程序沒(méi)做太多事情,主要演示的就是包工具管理依賴(lài)的事情。

這是做的第一次嘗試,可以看到這個(gè)目錄結(jié)構(gòu)是這樣的,這個(gè)是按照Go的官方習(xí)慣的編寫(xiě)方式,會(huì)把文件放在叫做src下面,hello可以看作一個(gè)是項(xiàng)目表,main就是文件。

這個(gè)是剛才目錄里的Dockerfile。它首先引用了一個(gè)Golang,這個(gè)是Docker官方提供的,它除了提供這個(gè)還提供其他語(yǔ)言的,Java都有。它做的事情很簡(jiǎn)單,首先把src目錄加到main里,然后拉去hello模塊里的依賴(lài)。從Golang,當(dāng)把src目錄加進(jìn)去之后就會(huì)把它作為Golang執(zhí)行時(shí)的目錄。這里不用把前面的前綴都寫(xiě),只需要寫(xiě)在Src目錄下面的名就可以了,就是hello。

優(yōu)缺點(diǎn)

•優(yōu)點(diǎn):同步更新項(xiàng)目依賴(lài);結(jié)構(gòu)簡(jiǎn)單,容易維護(hù)。

•缺點(diǎn):無(wú)法對(duì)依賴(lài)做Cache,編譯耗時(shí);不同項(xiàng)目之間重新編譯依賴(lài)。

 

第二次嘗試,這個(gè)結(jié)構(gòu)跟剛才一樣,這里和剛才有一個(gè)最大的區(qū)別,它就是說(shuō)把剛才的依賴(lài)包直接手寫(xiě)到了Docker文件里,而且這個(gè)依賴(lài)包會(huì)寫(xiě)在,把src加入到整個(gè)Docker的地址之前,就是每次先執(zhí)行這句話(huà),然后再把所有的原密碼上傳設(shè)置。這個(gè)好處就是在于這句話(huà)執(zhí)行與否與互相間的修改不相關(guān)的。如果你重復(fù)執(zhí)行Dockerfile,可以在這里面直接Cache,這句話(huà)只要在第一次運(yùn)行一遍直接走到下面,這就會(huì)增加編譯的速度。如果想更新這個(gè)包的話(huà),可以減Cache命令,它就會(huì)重新拉取依賴(lài),這個(gè)依賴(lài)就是一個(gè)可以被Cache目標(biāo)。

優(yōu)缺點(diǎn)

•優(yōu)點(diǎn):依賴(lài)會(huì)被Cache,提高速度;結(jié)構(gòu)簡(jiǎn)單,容易維護(hù)。

•缺點(diǎn):手寫(xiě)依賴(lài),不能同步更新項(xiàng)目的變化;不同項(xiàng)目之間重新編譯依賴(lài)。
 

第三次嘗試,這個(gè)可以看到整個(gè)目錄結(jié)構(gòu)開(kāi)始變得比較復(fù)雜了,首先最大不同就是編譯變成了兩個(gè)腳本。Dockerfile沒(méi)有變,在src會(huì)出現(xiàn)一個(gè)github.com。Dockerfile只是直接把一個(gè)hello拷到了Docker里,而沒(méi)有做其他的事情。

優(yōu)缺點(diǎn)

•優(yōu)點(diǎn):依賴(lài)會(huì)被保存在本地,提高速度;依賴(lài)同步更新。

•缺點(diǎn):不同編譯環(huán)境保存的依賴(lài)可能不一致;依賴(lài)侵入項(xiàng)目,造成干擾;gitignore,但是很麻煩。

使用Docker進(jìn)行構(gòu)建

這是我們現(xiàn)在在使用的一些方法,是我們最終在使用的。首先可以從目錄結(jié)構(gòu)來(lái)看,它會(huì)比剛才第三種方法變得更加復(fù)雜,首先它會(huì)有兩個(gè)編譯的腳本,這個(gè)應(yīng)該是build sh.sh,hello.sh,我們寫(xiě)程序的時(shí)候知道,如果有問(wèn)題的話(huà)可以單獨(dú)抽象出一層來(lái)解決問(wèn)題,這個(gè)就是把一個(gè)基礎(chǔ)的依賴(lài)和真正構(gòu)建程序的Docker分成兩個(gè)Docker,base這層是在做依賴(lài),而hello會(huì)基于base做構(gòu)建。

這個(gè)是來(lái)介紹base Image,它所做的事情首先是起名字,同時(shí)會(huì)指定。下面這個(gè)Dockerfile就是base,它做的就是從Golang程序里作為一個(gè)基礎(chǔ)隱秘,把src加入進(jìn)去,這是Go的一個(gè)配置方法,相當(dāng)于它會(huì)拉取所有項(xiàng)目依賴(lài)。這樣做完以后歸做base Image有項(xiàng)目所有依賴(lài)的包。

這是整個(gè)項(xiàng)目的所有依賴(lài),這里hello.sh是構(gòu)建項(xiàng)目的腳本,它跟剛才的最大區(qū)別是它構(gòu)建的配置文件發(fā)生了變化,這是指定了一個(gè)hello的名字。而下面是hello的Cache文件。這個(gè)地方會(huì)發(fā)現(xiàn),把src重新加入到image,這樣做就是當(dāng)hello image有變化的時(shí)候,它還是需要重新覆蓋到image。

優(yōu)缺點(diǎn)

•優(yōu)點(diǎn):依賴(lài)會(huì)被Cache在本地,提高速度;依賴(lài)同步更新;依賴(lài)可以被多個(gè)項(xiàng)目共享。

•缺點(diǎn):多維護(hù)一個(gè)image。

分享到

fanz

相關(guān)推薦