Docker學(xué)習(xí)路線12:開發(fā)者體驗
到目前為止,我們只討論了使用Docker來部署應(yīng)用程序。然而,Docker也是一個極好的用于開發(fā)應(yīng)用程序的工具。可以采用一些不同的建議來改善開發(fā)體驗。
?在應(yīng)用程序中使用docker-compose
以方便開發(fā)。?使用綁定掛載將本地代碼掛載到容器文件系統(tǒng)中,以避免每次更改都需要重新構(gòu)建容器映像。?對于自動重載,您可以使用像vite[1]這樣的工具用于客戶端,nodemon[2]用于nodejs,或者air[3]用于golang。?您還應(yīng)該提供一種調(diào)試應(yīng)用程序的方式。例如,使用delve[4]進行Go調(diào)試,在node.js中啟用調(diào)試使用--inspect標志等等。無論您使用什么,重點是您應(yīng)該有一種方法來調(diào)試在容器內(nèi)運行的應(yīng)用程序。?您應(yīng)該有一種在容器內(nèi)運行測試的方法。例如,您可以有一個單獨的docker-compose文件來運行測試。?您應(yīng)該擁有一個用于生產(chǎn)映像的CI流水線。?每個拉取請求都應(yīng)該有一個臨時環(huán)境。
Hot Reloading in Docker
即使我們啟用了層緩存以加速鏡像構(gòu)建,我們也不想在每次代碼更改時都重建容器鏡像。相反,我們希望容器中的應(yīng)用程序狀態(tài)立即反映更改。我們可以通過綁定掛載和熱重新加載工具的組合來實現(xiàn)這一點!
在 Docker 中使用調(diào)試器
為了使容器開發(fā)與本地開發(fā)具有競爭力,我們需要能夠在容器內(nèi)運行和附加調(diào)試器。
測試
我們希望在盡可能接近生產(chǎn)環(huán)境的情況下運行測試,因此最好在容器內(nèi)部進行測試!
持續(xù)集成(CI)
持續(xù)集成是指在將代碼推送到版本控制系統(tǒng)時自動執(zhí)行某些操作(例如構(gòu)建、測試等)的理念。
對于容器,我們可能需要執(zhí)行以下幾個操作:
?構(gòu)建容器鏡像?執(zhí)行測試?掃描容器鏡像的漏洞?給鏡像打標簽,附加有用的元數(shù)據(jù)?推送到容器注冊表
最后
為了方便其他設(shè)備和平臺的小伙伴觀看往期文章,鏈接奉上:
公眾號?Let us Coding
,牛客[5],知乎[6],開源中國[7],CSDN[8],思否[9],掘金[10],InfoQ[11],簡書[12],博客園[13],慕課[14],51CTO[15],helloworld[16],騰訊開發(fā)者社區(qū)[17],阿里開發(fā)者社區(qū)[18]
看完如果覺得有幫助,歡迎點贊、收藏和關(guān)注
到目前為止,我們只討論了使用Docker來部署應(yīng)用程序。然而,Docker也是一個極好的用于開發(fā)應(yīng)用程序的工具。可以采用一些不同的建議來改善開發(fā)體驗。
?在應(yīng)用程序中使用docker-compose
以方便開發(fā)。?使用綁定掛載將本地代碼掛載到容器文件系統(tǒng)中,以避免每次更改都需要重新構(gòu)建容器映像。?對于自動重載,你可以使用像vite[19]這樣的工具用于客戶端,nodemon[20]用于nodejs,或者air[21]用于golang。?你還應(yīng)該提供一種調(diào)試應(yīng)用程序的方式。例如,使用delve[22]進行Go調(diào)試,在node.js中啟用調(diào)試使用--inspect標志等等。無論你使用什么,重點是你應(yīng)該有一種方法來調(diào)試在容器內(nèi)運行的應(yīng)用程序。?你應(yīng)該有一種在容器內(nèi)運行測試的方法。例如,你可以有一個單獨的docker-compose文件來運行測試。?你應(yīng)該擁有一個用于生產(chǎn)映像的CI流水線。?每個拉取請求都應(yīng)該有一個臨時環(huán)境。
Hot Reloading in Docker
即使我們啟用了層緩存以加速鏡像構(gòu)建,我們也不想在每次代碼更改時都重建容器鏡像。相反,我們希望容器中的應(yīng)用程序狀態(tài)立即反映更改。我們可以通過綁定掛載和熱重新加載工具的組合來實現(xiàn)這一點!
在 Docker 中使用調(diào)試器
為了使容器開發(fā)與本地開發(fā)具有競爭力,我們需要能夠在容器內(nèi)運行和附加調(diào)試器。
測試
我們希望在盡可能接近生產(chǎn)環(huán)境的情況下運行測試,因此最好在容器內(nèi)部進行測試!
持續(xù)集成(CI)
持續(xù)集成是指在將代碼推送到版本控制系統(tǒng)時自動執(zhí)行某些操作(例如構(gòu)建、測試等)的理念。
對于容器,我們可能需要執(zhí)行以下幾個操作:
?構(gòu)建容器鏡像?執(zhí)行測試?掃描容器鏡像的漏洞?給鏡像打標簽,附加有用的元數(shù)據(jù)?推送到容器注冊表
最后
為了方便其他設(shè)備和平臺的小伙伴觀看往期文章,鏈接奉上:
公眾號?Let us Coding
,???/strong>[23],知乎[24],開源中國[25],CSDN[26],思否[27],掘金[28],InfoQ[29],簡書[30],博客園[31],慕課[32],51CTO[33],helloworld[34],騰訊開發(fā)者社區(qū)[35],阿里開發(fā)者社區(qū)[36]
看完如果覺得有幫助,歡迎點贊、收藏和關(guān)注
相關(guān)鏈接
[1]
?vite:?https://vitejs.dev/[2]
?nodemon:?https://nodemon.io/[3]
?air:?https://github.com/cosmtrek/air[4]
?delve:?https://github.com/go-delve/delve[5]
????/strong>:?https://www.nowcoder.com/users/752272586[6]
?知乎:?https://www.zhihu.com/people/11-78-37-92/posts[7]
?開源中國:?https://my.oschina.net/u/5599376[8]
?CSDN:?https://blog.csdn.net/2302_76489021?type=blog[9]
?思否:?https://segmentfault.com/u/caisekongbai/articles[10]
?掘金:?https://juejin.cn/user/3162666248713837/posts[11]
?InfoQ:?https://www.infoq.cn/profile/75CD8E259D2070/publish[12]
?簡書:?https://www.jianshu.com/u/75146b564de0[13]
?博客園:?https://www.cnblogs.com/xiaowange/[14]
?慕課:?https://www.imooc.com/u/index/articles[15]
?51CTO:?https://blog.51cto.com/xiaowange[16]
?helloworld:?https://www.helloworld.net/6389284992[17]
?騰訊開發(fā)者社區(qū):?https://cloud.tencent.com/developer/user/10282289[18]
?阿里開發(fā)者社區(qū):?https://developer.aliyun.com/profile/ssy2zbcsdghuk[19]
?vite:?https://vitejs.dev/[20]
?nodemon:?https://nodemon.io/[21]
?air:?https://github.com/cosmtrek/air[22]
?delve:?https://github.com/go-delve/delve[23]
????/strong>:?https://www.nowcoder.com/users/752272586[24]
?知乎:?https://www.zhihu.com/people/11-78-37-92/posts[25]
?開源中國:?https://my.oschina.net/u/5599376[26]
?CSDN:?https://blog.csdn.net/2302_76489021?type=blog[27]
?思否:?https://segmentfault.com/u/caisekongbai/articles[28]
?掘金:?https://juejin.cn/user/3162666248713837/posts[29]
?InfoQ:?https://www.infoq.cn/profile/75CD8E259D2070/publish[30]
?簡書:?https://www.jianshu.com/u/75146b564de0[31]
?博客園:?https://www.cnblogs.com/xiaowange/[32]
?慕課:?https://www.imooc.com/u/index/articles[33]
?51CTO:?https://blog.51cto.com/xiaowange[34]
?helloworld:?https://www.helloworld.net/6389284992[35]
?騰訊開發(fā)者社區(qū):?https://cloud.tencent.com/developer/user/10282289[36]
?阿里開發(fā)者社區(qū):?https://developer.aliyun.com/profile/ssy2zbcsdghuk