這是很簡(jiǎn)單的Go的程序。它首先會(huì)引入兩個(gè)包,一個(gè)是官方包,一個(gè)是外部包,它需要包管理依賴工具來引用到。這個(gè)數(shù)主函數(shù),它做的就是先建一個(gè)http,然后通過官方里的App功能把這個(gè)啟動(dòng)起來,然后在1234端口打開。可以看到這個(gè)程序沒做太多事情,主要演示的就是包工具管理依賴的事情。
這是做的第一次嘗試,可以看到這個(gè)目錄結(jié)構(gòu)是這樣的,這個(gè)是按照Go的官方習(xí)慣的編寫方式,會(huì)把文件放在叫做src下面,hello可以看作一個(gè)是項(xiàng)目表,main就是文件。
這個(gè)是剛才目錄里的Dockerfile。它首先引用了一個(gè)Golang,這個(gè)是Docker官方提供的,它除了提供這個(gè)還提供其他語言的,Java都有。它做的事情很簡(jiǎn)單,首先把src目錄加到main里,然后拉去hello模塊里的依賴。從Golang,當(dāng)把src目錄加進(jìn)去之后就會(huì)把它作為Golang執(zhí)行時(shí)的目錄。這里不用把前面的前綴都寫,只需要寫在Src目錄下面的名就可以了,就是hello。
優(yōu)缺點(diǎn)
•優(yōu)點(diǎn):同步更新項(xiàng)目依賴;結(jié)構(gòu)簡(jiǎn)單,容易維護(hù)。
•缺點(diǎn):無法對(duì)依賴做Cache,編譯耗時(shí);不同項(xiàng)目之間重新編譯依賴。
第二次嘗試,這個(gè)結(jié)構(gòu)跟剛才一樣,這里和剛才有一個(gè)最大的區(qū)別,它就是說把剛才的依賴包直接手寫到了Docker文件里,而且這個(gè)依賴包會(huì)寫在,把src加入到整個(gè)Docker的地址之前,就是每次先執(zhí)行這句話,然后再把所有的原密碼上傳設(shè)置。這個(gè)好處就是在于這句話執(zhí)行與否與互相間的修改不相關(guān)的。如果你重復(fù)執(zhí)行Dockerfile,可以在這里面直接Cache,這句話只要在第一次運(yùn)行一遍直接走到下面,這就會(huì)增加編譯的速度。如果想更新這個(gè)包的話,可以減Cache命令,它就會(huì)重新拉取依賴,這個(gè)依賴就是一個(gè)可以被Cache目標(biāo)。
優(yōu)缺點(diǎn)
•優(yōu)點(diǎn):依賴會(huì)被Cache,提高速度;結(jié)構(gòu)簡(jiǎn)單,容易維護(hù)。
•缺點(diǎn):手寫依賴,不能同步更新項(xiàng)目的變化;不同項(xiàng)目之間重新編譯依賴。
第三次嘗試,這個(gè)可以看到整個(gè)目錄結(jié)構(gòu)開始變得比較復(fù)雜了,首先最大不同就是編譯變成了兩個(gè)腳本。Dockerfile沒有變,在src會(huì)出現(xiàn)一個(gè)github.com。Dockerfile只是直接把一個(gè)hello拷到了Docker里,而沒有做其他的事情。
優(yōu)缺點(diǎn)
•優(yōu)點(diǎn):依賴會(huì)被保存在本地,提高速度;依賴同步更新。
•缺點(diǎn):不同編譯環(huán)境保存的依賴可能不一致;依賴侵入項(xiàng)目,造成干擾;gitignore,但是很麻煩。
使用Docker進(jìn)行構(gòu)建
這是我們現(xiàn)在在使用的一些方法,是我們最終在使用的。首先可以從目錄結(jié)構(gòu)來看,它會(huì)比剛才第三種方法變得更加復(fù)雜,首先它會(huì)有兩個(gè)編譯的腳本,這個(gè)應(yīng)該是build sh.sh,hello.sh,我們寫程序的時(shí)候知道,如果有問題的話可以單獨(dú)抽象出一層來解決問題,這個(gè)就是把一個(gè)基礎(chǔ)的依賴和真正構(gòu)建程序的Docker分成兩個(gè)Docker,base這層是在做依賴,而hello會(huì)基于base做構(gòu)建。
這個(gè)是來介紹base Image,它所做的事情首先是起名字,同時(shí)會(huì)指定。下面這個(gè)Dockerfile就是base,它做的就是從Golang程序里作為一個(gè)基礎(chǔ)隱秘,把src加入進(jìn)去,這是Go的一個(gè)配置方法,相當(dāng)于它會(huì)拉取所有項(xiàng)目依賴。這樣做完以后歸做base Image有項(xiàng)目所有依賴的包。
這是整個(gè)項(xiàng)目的所有依賴,這里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):依賴會(huì)被Cache在本地,提高速度;依賴同步更新;依賴可以被多個(gè)項(xiàng)目共享。
•缺點(diǎn):多維護(hù)一個(gè)image。