如何使用ker部署GoWeb應(yīng)用程序_第1頁(yè)
如何使用ker部署GoWeb應(yīng)用程序_第2頁(yè)
如何使用ker部署GoWeb應(yīng)用程序_第3頁(yè)
如何使用ker部署GoWeb應(yīng)用程序_第4頁(yè)
如何使用ker部署GoWeb應(yīng)用程序_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、熟悉docker如何提升你在構(gòu)建、測(cè)試并部署go web應(yīng)用程序的方式,并幾理解如何 使川semaphore來(lái)持續(xù)部署。簡(jiǎn)介人多數(shù)情況下go應(yīng)用程序被編譯成單個(gè)二進(jìn)制文件,web應(yīng)用程序則會(huì)包括模版和 配置文件。而當(dāng)一個(gè)項(xiàng)目中有很多文件的時(shí)候,由于很多文件沒(méi)有同步就會(huì)導(dǎo)致錯(cuò)誤的發(fā)4: 并且產(chǎn)生很多的問(wèn)題。在本教程111,你將啓習(xí)如何使用docker部署個(gè)go web應(yīng)用程序,并且認(rèn)識(shí)到docker 將如何改進(jìn)你的開(kāi)發(fā)工作流及部署流程。各種規(guī)模的團(tuán)隊(duì)都會(huì)從這里所介紹的設(shè)置中受益。冃標(biāo)在本文結(jié)束后,你將:o對(duì)docker有基本的了解,o發(fā)現(xiàn)在docker將如何幫助你開(kāi)發(fā)go應(yīng)用程序o學(xué)習(xí)如何為一個(gè)

2、生產(chǎn)環(huán)境中的go應(yīng)川程序創(chuàng)建docker容器o知道如何使用semaphore持續(xù)地在你的服務(wù)器上部署docker容器先決條件為了學(xué)習(xí)本教程,你講需要:o在你的主機(jī)或者服務(wù)器上安裝dockero具有一臺(tái)能夠使用ssh密鑰對(duì)ssh請(qǐng)求進(jìn)行認(rèn)證的服務(wù)器理解dockerdocker幫助你為應(yīng)用程序創(chuàng)建一個(gè)單獨(dú)的可部署單元。這個(gè)單元,也被稱為容器,包 含該應(yīng)用程序需要的所有東西。它包括代碼(或者二進(jìn)制文件)、untime (運(yùn)行環(huán)境)、 系統(tǒng)工具盒系統(tǒng)庫(kù)。將所有必需的資源打包成個(gè)單元將確保無(wú)論應(yīng)用程序部署到哪里都有 完全相同的壞境。這也有助于維護(hù)一個(gè)完全相同的開(kāi)發(fā)和牛產(chǎn)配置,這在以前是很難追蹤的。一旦開(kāi)

3、始,容器的創(chuàng)建和部署將自動(dòng)完成。它消除了一大類問(wèn)題。這些問(wèn)題主要是山 于文件沒(méi)有同步或者開(kāi)發(fā)和牛產(chǎn)環(huán)境z間的差異導(dǎo)致的。docker幫助解決了這些問(wèn)題。相比于虛擬機(jī)的優(yōu)勢(shì)容器提供了與虛擬機(jī)相似的資源分配和隔離優(yōu)勢(shì)。然而,相同z處僅此而已。一個(gè)虛擬機(jī)需要它自己的客戶操作系統(tǒng)而容器共享主機(jī)操作系統(tǒng)的內(nèi)核。這意味著容 器更加輕量而月需要更少的資源。從木質(zhì)上講,一個(gè)虛擬機(jī)是操作系統(tǒng)中的一個(gè)操作系統(tǒng)。 而另一方面的容器則更像是操作系統(tǒng)中的其它應(yīng)用程序。棊木上,容器需要的資源(內(nèi)存、 磁盤空間等等)比虛擬機(jī)少很多,并旦具有比虛擬機(jī)快很多的啟動(dòng)時(shí)間。docker在開(kāi)發(fā)階段的優(yōu)勢(shì)在開(kāi)發(fā)屮使用docker的優(yōu)勢(shì)

4、包括:o 一個(gè)用于所有團(tuán)隊(duì)成員的標(biāo)準(zhǔn)開(kāi)發(fā)環(huán)境。更新的依賴性集中化以及在任何地方都能使用相同的容器o在開(kāi)發(fā)和生產(chǎn)中完全相同的環(huán)境。修復(fù)了可能只會(huì)出現(xiàn)在生產(chǎn)環(huán)境中的潛在問(wèn)題為什么使用docker運(yùn)行一個(gè)go web應(yīng)用程序?多數(shù)go應(yīng)用程序時(shí)簡(jiǎn)單的二進(jìn)制文件。這就引發(fā)一個(gè)問(wèn)題一為什么使用docker運(yùn)行 一個(gè)go應(yīng)用程序? 一些使用docker運(yùn)行g(shù)o的理由包括:o web應(yīng)用程序通常都有模版和配置文件。docker有助于保持這些文件與二進(jìn)制文件 的同步o docker確保了在開(kāi)發(fā)或生產(chǎn)中完全相同的配置。很多吋候當(dāng)應(yīng)用程序可以在開(kāi)發(fā)環(huán) 境中正常工作吋,在生產(chǎn)環(huán)境去無(wú)法正常工作。使用docker則把

5、你從對(duì)這些問(wèn)題的擔(dān)心中 解放了出來(lái)。o在一個(gè)人型的團(tuán)隊(duì)小主機(jī)、操作系統(tǒng)及所安裝的軟件可能存在很大的不同。docker 提供了 種機(jī)制來(lái)確保致的開(kāi)發(fā)環(huán)境配置。這將提升團(tuán)隊(duì)的生產(chǎn)力并tl在開(kāi)發(fā)階段減少?zèng)_ 突和可避免問(wèn)題的發(fā)生。創(chuàng)建一個(gè)簡(jiǎn)單的go web應(yīng)用程序在本文中味了演示,我們會(huì)用go創(chuàng)建一個(gè)簡(jiǎn)單的web應(yīng)用程序。這個(gè)我們稱z為mathapp的應(yīng)用程序?qū)ⅲ簅探索不同數(shù)學(xué)運(yùn)算的路徑0在視圖中使川html模版o使用一個(gè)可配置的文件來(lái)定制化該應(yīng)用程序o包含所選功能的測(cè)試訪問(wèn)/sum/3/6將顯示一個(gè)包含3與6相加后結(jié)果的頁(yè)面。同樣的,訪問(wèn)/product/3/6 將顯示一個(gè)3和6乘積的頁(yè)面。在本文中

6、我們使用beego框架。請(qǐng)注意你可以為你的應(yīng)用亨旭使用任何框架(或者什 么也不用)。最終的目錄結(jié)構(gòu)完成之后,mathapp的目錄結(jié)構(gòu)應(yīng)該看起來(lái)如下:mathapp |conf |1app.conf |main.go |main_test.go 1views|泊 valid-route.html 1result.html我們假設(shè)mathapp h錄位于/ app h錄z中。應(yīng)用程序的主文件時(shí)main.go,為主應(yīng)用程序的根目錄屮。這個(gè)文件包含該應(yīng)用的所 有功能。一些main.go屮的功能是使用main_test.go來(lái)測(cè)試的。views文件夾中包含視圖文件invald-route.html和re

7、sult.html。配置文件app.conf 位于conf文件夾川。beego使用該文件來(lái)定制化應(yīng)用程序。應(yīng)用程序文件的內(nèi)容應(yīng)用程序主文件(main.go)包含所有的應(yīng)用程序邏輯。該文件的內(nèi)容如下:*/ main.go*package* main*import* (”strconv” ” the main function defines a single route, its handler*/ and starts listening on port 8080 (default port for beego)*func* main() */* this would match routes

8、 like the following:*/sum/3/5*/product/6/23*.*/*beego.router(7:operation/:num1 :int/:num2:inr, smaincontroller) beego.run()* this is the controller that this application uses*type* maincontroller *struct* beego.controller*/ get() handles all requests to the route defined above*func* (c *maincontroll

9、er) get() */obtain the values of the route parameters defined in the route above* operation := c.ctxput.param(n:operation”)num1, _ := strconv.atoi(c.ctx.lnput.param(”:num1”)num2, _ := strconv.atoi(c.ctx.lnput.param(n:num2n) */set the values for use in the template* c.data"operation” = operation

10、 c.data”num1” = num1 c.data”num?' = num2 c.tpiname = "result.html” */ perform the calculation depending on the 'operation' route parameter* *switch* operation *case* "sum”: c.datahresulth = add(num1, num2) *case* "product": c.datahresultn = multiply(num1, num2) "

11、default卄:c.tpiname = "invalid-route.html" *func* add(n1, n2 int) int *return* n1 + n2*func* multiply(n1, n2 int) int *return* n1 * n2在你的應(yīng)用程序中,它可能被分割到多個(gè)文件中。然而,針對(duì)木教程的目的,我們希 望事情簡(jiǎn)單化。測(cè)試文件的內(nèi)容main.go文件有一些需要測(cè)試的功能。對(duì)于這些功能的測(cè)試可以在main_test.go小找 到。該文件的內(nèi)容如下:/ main_test.gopackagemainimport ”testing”functe

12、stsum(t *testing.t) if add(2, 5) != 7 t.fail()if add(2, 100) != 102 t.fail()if add(222, 100) != 322 t.fail()functestproduct(t *testing.t) if multiply(2, 5) != 10 t.fail()if multiply(2, 100) != 200 t.fail()if multiply(222, 3) != 666 t.fail()如果你想進(jìn)行持續(xù)的部署,那么對(duì)你的應(yīng)用程序進(jìn)行測(cè)試是特別有用的。如果你有了足夠的測(cè)試,那么你可以持續(xù)地部署而不必?fù)?dān)心在你

13、的應(yīng)川程序屮出現(xiàn)錯(cuò)謀。視圖文件內(nèi)容視圖文件時(shí)html模版。應(yīng)川程序使川它們來(lái)顯示對(duì)請(qǐng)求的應(yīng)答。result.html的內(nèi)容如下:v! result.html -><!- this file is used to display the result of calculations -xidoctype html><html><headxtitle>mathapp .operation</title></head><body> the .operation of .num1 and .num2 is.result<

14、;/bodyx/html>invalid-route.html 的內(nèi)容如下:<!- invalid-route.html -><!- this file is used when an invalid operation is specified in the route -xidoctype html><html><headxtitle>mathapp</title><meta name="viewport,'content=”width=devicewidth, initial-scale=1&quo

15、t;><meta charset=,utf-8"x/headxbody invalid operation</bodyx/html>配置文件的內(nèi)容app.conf是beego用于配置應(yīng)用程序的文件。它的內(nèi)容如下:;app.confappname = mathapphttpport = 8080runmode = dev在這個(gè)文件中:o appname是應(yīng)川程序?qū)⒁\(yùn)行的進(jìn)程的名字o httpport是應(yīng)用程序?qū)⒁O(jiān)聽(tīng)的的端口 runmode聲明了應(yīng)用程序?qū)⒁\(yùn)行的模式。有效的指包括dev用于開(kāi)發(fā)而prod用于生產(chǎn)。在開(kāi)發(fā)中使用docker本節(jié)將介紹在開(kāi)發(fā)過(guò)程中

16、使用docker的好處,并且向你展示在開(kāi)發(fā)中使用docker的必須步驟。配置docker用于開(kāi)發(fā)我們將使用dockerfile來(lái)配置docker以便用于開(kāi)發(fā)。針對(duì)開(kāi)發(fā)壞境,對(duì)其的配置應(yīng)該滿足以下的要求:o我們將使用上一節(jié)所提及的應(yīng)用程序o這些文件無(wú)論從容器的內(nèi)部還是外部都可以訪問(wèn)o我們將使用beego 口帶的bee工具。它用丁在開(kāi)發(fā)過(guò)程中在線地重新加載應(yīng)用程序(在docker容器的內(nèi)部)o docker將為應(yīng)用程序開(kāi)放8080端口o在我們的主機(jī)上,m用程序保存在/app/mathapp屮o在docker容器中,應(yīng)用程序保存在/go/src/mathapp中我們將為開(kāi)發(fā)所創(chuàng)建的docker im

17、age的名字是ma-imageo我們將要運(yùn)行的docker容器的名字是mainstance步驟一一創(chuàng)建dockerfile如下的dockerfile可以滿足以上的要求:*from* golang:1.6*# install beego and the bee dev tool*run* go get go get expose the application on port 8080*expose* 8080*# set the entry point of the container to the bee command that runs the*# application and wat

18、ches for changes*cmd* ”bee”,”run”第一行,from golang:1.6將go的官方映像文件作為基礎(chǔ)映像。該映像文件預(yù)安裝了 go 1.6 該映像已經(jīng)把$gopath的值設(shè)宜到了 /go。所有安裝在/go/src'l'的包將能夠被go命令訪問(wèn)。第二行,run go get go get 安裝beego包和bee工具。beego包將在應(yīng)用程序中使用。bee丄具用語(yǔ)在開(kāi)發(fā)中 再現(xiàn)地重新加載我們的代碼。第三行,expose 8080在開(kāi)發(fā)主機(jī)上利用容器為應(yīng)用程序開(kāi)放8080端口。最后一行,cmd ,beeu, hrunn使用bee命令啟動(dòng)應(yīng)用程序的在線

19、重新加載。步驟二一構(gòu)建image一旦創(chuàng)建了 docker file,運(yùn)行如下的命令來(lái)創(chuàng)建image:docker build t ma-image .執(zhí)行以上的命令將創(chuàng)建名為ma-image的image。該image現(xiàn)在可以用于使用該應(yīng)用 程序的任何人。這將確保這個(gè)團(tuán)隊(duì)能夠使用一個(gè)統(tǒng)一的開(kāi)發(fā)環(huán)境。為了查看你的系統(tǒng)上的image列花運(yùn)行如下的命令:docker images這行該命令將輸出與以下類似的內(nèi)容:repository tag image id created sizema-image latest 8d53aa0dd0cb 31 seconds ago 784.7 mbgolang 1

20、.6 22a6ecf1f7cc 5 days ago 743.9 mb注意image的確切名字和編號(hào)可能不同,但是,你應(yīng)該至少看到列表屮有g(shù)olang和 ma-image image。步驟三一運(yùn)行容器一旦maimage已經(jīng)完成,你町以使用以下的命令啟動(dòng)一個(gè)容器:docker run -it -rm -name ma-instance -p 8080:8080 /-v /app/mathapp:/go/src/mathapp -w /go/src/mathapp ma-image讓我們分析一下上而的命令來(lái)看看它做了什么。o docker run命令用于從一個(gè)image上啟動(dòng)一個(gè)容器o -it標(biāo)簽

21、以交互的方式啟動(dòng)容器orm標(biāo)簽在容器關(guān)閉后將會(huì)將英清除oname ma-instance 將容器命名為 mainstaneeo -p 8080:8080標(biāo)簽允許通過(guò)8080端口訪問(wèn)該容器o -v /app/mathapp:/go/src/mathapp 更復(fù)雜些。它將主機(jī)的/app/mathapp 映射到容器中的/go/src/mathapp.這將使得開(kāi)發(fā)文件在容器的內(nèi)部和外部都可以訪問(wèn)。o ma-image部分聲明了用于容器的image。執(zhí)行以上的命令將啟動(dòng)docker容器。該容器為你的應(yīng)用程序開(kāi)發(fā)了 8080端ii。無(wú)論 何時(shí)你做了變更,它都將白動(dòng)地重構(gòu)你的應(yīng)用程序。你將在console

22、(控制臺(tái))上看到以下 的輸出:bee :1.4.1beego :1.6.1go :go version go1.6 linux/amd642016/04/10 13:04:15 info uses 'mathapp' as 'appname'2016/04/10 13:04:15 info initializingwatcher.2016/04/10 13:04:15 trac directory(/go/src/mathapp)2016/04/10 13:04:15 info start building.2016/04/10 13:04:18 succ bu

23、ild was successful2016/04/10 13:04:18 info restarting mathapp .2016/04/10 13:04:18 info ./mathapp is running.2016/04/10 13:04:18 asm_amd64.s: 1998i http server running on :8080為了檢查相關(guān)的設(shè)進(jìn),可以在瀏覽器中訪問(wèn)。你講看到與卜面類似的東西:-c d localhost:8080/sum/4/5the sum of 4 and 5 is 9注意:這里假定你是在使用木地主機(jī)步驟四一開(kāi)發(fā)應(yīng)用程序現(xiàn)在,讓我們看看這將如何在開(kāi)發(fā)

24、階段提供幫助。在完成以下的操作時(shí)請(qǐng)確保容器在運(yùn)行。在# main.go #文件中,將第34行: c.data,operationh = operation改成:c.data"operatiort = "real" + operation在你保存修改的一刻,你講看到類似以卜的輸出:2016/04/10 13:17:51 even ,7go/src/mathapp/main.go,*: mod ify2016/04/10 13:17:51skip 7go/src/mathapp/main.goh: mod ify2016/04/10 13:17:52 info sta

25、rt building.2016/04/10 13:17:56 succ build was successful2016/04/10 13:17:56 inforestarting mathapp .2016/04/10 13:17:56 info ./mathapp is running.2016/04/10 13:17:56 asm_amd64.s: 1998i http server running on :8080為了檢查該變更,在你的瀏覽器中訪問(wèn)。你將看到類似下面的輸出:g t g q localhost:8080/sum/4/5the real sum of 4 and 5 is

26、 9如你所見(jiàn),你的應(yīng)用程序在保存了修改之麻自動(dòng)地編譯并提供了服務(wù)。在生產(chǎn)中使用docker木節(jié)將講解如何在一個(gè)docker容器小部署go應(yīng)用程序。我們將使用semaphore來(lái)完 成以下的工作:o當(dāng)一個(gè)變更被推送到git資料庫(kù)后口動(dòng)地進(jìn)行編譯o白動(dòng)地運(yùn)行測(cè)試。如果編譯成功并且通過(guò)測(cè)試就創(chuàng)建一個(gè)docker映像o將docker映像文件推送入docker hubo更新服務(wù)器以便使用最新的docker映像創(chuàng)建一個(gè)生產(chǎn)用的dockerfile在開(kāi)發(fā)過(guò)程中,我們的冃錄冇如下的結(jié)構(gòu):mathapp |conf |1app.conf |main.go |main_test.go 1views|invalid

27、 route.html 1result.html由于我們想要從項(xiàng)目中構(gòu)建docker映像,我們需要?jiǎng)?chuàng)建一個(gè)將用于生產(chǎn)環(huán)境的dockerfileo在項(xiàng)fl的根冃錄小創(chuàng)建一個(gè)dockerfile0新的fi錄結(jié)構(gòu)如下所示:mathapp |conf |1app.conf |dockerfile |main.go |main_test.go 1views |invalid-route.html 1result.html在dockerfile文件中輸入以下的內(nèi)容:from golang:1.6 create the directory where the application will resider

28、unmkdir/appcopy the application files (needed for production)addmathapp/app/mathappaddviews/app/viewsaddconf/app/c onfset the working directory to the app directoryworkdir/appexpose the application on port 8080. this should be the same as in the app.conf fileexpose8080set the entry point of the cont

29、ainer to the application executableentrypoint/app/mathapp讓我們具體看一下這些命令都做了什么。第一個(gè)命令,from golang: 1.6表明將基于我們?cè)陂_(kāi)發(fā)中使用的golang: 1.6映像構(gòu)建新的映像文件。第二個(gè)命令:run mkdir /app在容器的根里創(chuàng)建一個(gè)名為app的目錄,我們用其來(lái)保存項(xiàng)目文件。第三個(gè)命令集:add mathapp /app/mathappadd views /app/viewsaddconf /app/conf從主機(jī)中拷貝二進(jìn)制、視圖文件夾及配置文件夾到映像文件中的應(yīng)用程序h錄。第四 個(gè)命令:workdi

30、r/app在映像文件中把/app設(shè)置為工作冃錄。第五個(gè)命令:expose 8080在容器中開(kāi)放8080端口。該端口應(yīng)該與應(yīng)川程序的app.conf文件中聲明的端口一致。 最后的命令:entrypoint /app/mathapp將映像文件的入口設(shè)置為應(yīng)用程序的二進(jìn)制文件。這將啟動(dòng)二進(jìn)制文件的執(zhí)行并監(jiān)聽(tīng)8080 端 m o自動(dòng)地編譯及測(cè)試一旦你把代碼上傳到你的資料庫(kù)中semaphore將口動(dòng)地對(duì)代碼進(jìn)行編譯和測(cè)試,一切 都變得簡(jiǎn)單了。點(diǎn)擊這里了解如何添加你的github或bitbucket項(xiàng)h并口在semaphore上 設(shè)置golang項(xiàng)冃。一個(gè)go項(xiàng)目的缺省配置文件關(guān)注以下兒點(diǎn):o獲取相關(guān)文件

31、o編譯項(xiàng)目o運(yùn)行測(cè)試一旦你完成這個(gè)過(guò)程,就可以在semaphore儀表盤上看到最近的編譯和測(cè)試狀態(tài)。如 果編譯或測(cè)試失敗,該過(guò)程會(huì)終止而且也不會(huì)部署任何內(nèi)容。在semaphore上倉(cāng)u建initial setup來(lái)實(shí)現(xiàn)自動(dòng)部:署一旦你配置好了編譯過(guò)程,卜-步就是配置部署過(guò)程。為了部署應(yīng)用程序,你需要:1. 創(chuàng)建 docker image2. 將 docker image 推送入 docker hub3. 拉取新的image來(lái)更新服務(wù)器并基于該image啟動(dòng)一個(gè)新的docker弈器作為開(kāi)始,我們需要在semaphore上配置項(xiàng)冃實(shí)現(xiàn)持續(xù)部署。前三個(gè)步驟相對(duì)簡(jiǎn)單:o選擇部署模式o選擇部署策略o選擇

32、在部署過(guò)程中使用的資料庫(kù)分支第四步(設(shè)置部署命令),我們將使用下一節(jié)中的命令。當(dāng)前暫空著并轉(zhuǎn)到下一步。在第五步屮,輸入你的服務(wù)器屮用戶的ssh私鑰。這將使得一些部署命令可以在你的 服務(wù)器上安全執(zhí)行而不需要輸入口令。在笫六部中,你可以命名你的服務(wù)器。如果你做的話,semaphore會(huì)給該服務(wù)器指定 一個(gè)類似server-1234這樣的隨機(jī)名字。在服務(wù)器上設(shè)置更新腳本z后,我們將配置部署過(guò)程,semaphore將創(chuàng)建新的image冰將其上傳到docker hub 屮。一旦完成,一個(gè)semaphore的命令將執(zhí)行你的服務(wù)器上的腳木來(lái)初始化更新過(guò)程。為了完成這個(gè)工作,我們需耍將名為update.sh的

33、文件放直到你的服務(wù)器屮。#!/bin/bashdocker pull $1 /ma-prod:latestifdocker stop ma-app; then dockerrm ma-app; fidocker run d p 8080:8080 name ma-app $1/ma-prodifdockerrmi $(docker images -filter "dangling=trueh -q-trunc); then :; fi使用如卜的命令給該文件賦予執(zhí)行權(quán)限:chmod 4-x update.sh讓我們來(lái)看一卜-該文件是如何使用的。這個(gè)腳本接收一個(gè)參數(shù)并且在命令中使用該參數(shù)

34、。這個(gè)參數(shù)應(yīng)該是你在docker hub ±的丿ij戶名。下面是使川該命令的例了:./update.sh docker_hub_username現(xiàn)在讓我們看一下這個(gè)文件屮的每一個(gè)命令來(lái)理解他們要做什么。第一個(gè)命令,docker pull $1/ma-prod:latest從docker hub上拉取最新的image到服務(wù)器屮。如果你在docker hub上的川戶名是 demo_user,該命令將拉取 docker hub i:標(biāo)記為 latest、名為 demo_user/ma-prod 的 image。第二個(gè)命令:ifdocker stop ma-app; then dockerr

35、m ma-app; fi停止并刪除之,前任何以maapp為名字而啟動(dòng)的容器。第三個(gè)命令:docker run -d -p 8080:8080 -name ma-app $1/ma-prod使用在最近一次編譯中包涵變更的最新image來(lái)川動(dòng)一個(gè)新的容器。最麻的命令:dockerrmi $(docker images -filter *'dangling=true” -q no-trunc)從服務(wù)器上刪除任何沒(méi)有用的imageo這種清理將保持服務(wù)器整潔并降低磁盤空間的 占用。注意:這個(gè)文件必須存放在用八主目錄中,而該用八就是之前的步驟中所用到的ssh 密鑰的所有者。如果文件的位直發(fā)住了變化

36、,則需要在后而的章節(jié)小相應(yīng)地更新部署命令。 配置項(xiàng)口使其能夠支持docker缺省情況下,semaphore ±的新項(xiàng)目使用ubuntu 14.04 lts v1603平臺(tái)。該平臺(tái)并 不支持dockero由于我們希望使用docker,我們需要修改semaphore的配置來(lái)使用ubuntu 14.04 lts v1603(beta with docker support)平臺(tái)。設(shè)置壞境變量為了在部署過(guò)程屮安全使用docker hub,我們需要把我們的證書保存在semaphore 自動(dòng)初始化的環(huán)境變最屮。我們將保存以下的變量:o dh_username docker hub 用戶名o dh

37、_password 一 docker hub 口令o dh_email docker hub email 地址這里是如何以安全的方式設(shè)置環(huán)境變量。設(shè)置部署命令雖然我們完成了初始配置,但是實(shí)際上什么也不會(huì)部署。原因是我們?cè)诿瞽h(huán)節(jié)中都 述是空白。在第一步,我們將輸入用于完成部署過(guò)程的命令。為了完成這一步,請(qǐng)進(jìn)入semaphore 中你的項(xiàng)目主頁(yè)。q httptj/mmaphortctccxn 在這一頁(yè)上,點(diǎn)擊server欄屮服務(wù)器的名字。這將帶你進(jìn)入:點(diǎn)擊位于頁(yè)頭下方頁(yè)面右側(cè)的edit server按鈕。a hnp« > scmaphoreclcom 在隨后的一頁(yè)中,我們需要關(guān)注

38、標(biāo)題為deploy commands的最后一欄。點(diǎn)擊change deploy commands鏈接來(lái)開(kāi)丿j命令編輯。rmp% semaphoreclcom 乃 mmaphorvdeploy ccmmemlt90 f /90 build *o rathapp q usfzhf p som 10m emaudocker build t oo*»rod docker uy m prodiutmt tth ifsermw/m prodiuteit(tocter ptnh ton mcmw/m prod:latest1rk1tkeycheckingoo four mtver utemmm*r

39、ouf 3 mmresswh usermare第翡城雨(obiiti 問(wèn) en在編輯框中,輸入如卜的命令并點(diǎn)擊save deploy commands按鈕:go get -v -d ./go build -v -0 mathappdocker login -u $dh_username -p $dh_password -e $dh_emaildocker build t ma-prod .docker tag ma-prod:latest $dh_username/ma-prod:latestdocker push $dhjjsername/ma-proddatestssh -ostricth

40、ostkeychecking=no your_server_usernameyour_ip_address ”/update.sh $dh_username”注意:請(qǐng)確定用正確的值替換 your_server_usemameyour_ip_address。讓我們具體看一下每個(gè)命令。前兩個(gè)命令go get和go build是go的標(biāo)準(zhǔn)命令用于獲取相關(guān)文件并和應(yīng)地編譯項(xiàng)目。 注意go build命令說(shuō)聲明的二進(jìn)制文件名應(yīng)該是mathapp。這個(gè)名字應(yīng)該與dockerfile中使 用的名字相同。第三個(gè)命令,docker login -u $dh_username -p $dh_password -e $dh_email使用環(huán)境變量實(shí)現(xiàn)在docker hub ±的認(rèn)證,從而使得我們能夠推送最新的image。第四個(gè)命令, docker build t ma-prod .基于最新的代碼庫(kù)萊創(chuàng)建docker image。第五個(gè)命令,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論