精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:云計算技術(shù)專區(qū) → 正文

Docker持續(xù)部署圖文詳解

責(zé)任編輯:editor006 作者:蕭田國 張春源 |來源:企業(yè)網(wǎng)D1Net  2015-07-22 15:54:32 本文摘自:CSDN

JAVA項目如何通過Docker實現(xiàn)持續(xù)部署(只需簡單四步),即: 開發(fā)同學(xué)通過git push上傳代碼,經(jīng)Git和Jenkins配合,自動完成程序部署、發(fā)布,全程無需運維人員參與。

這是一種真正的容器級的實現(xiàn),這個帶來的好處,不僅僅是效率的提升,更是一種變革: * 開發(fā)人員第一次真正為自己的代碼負責(zé)——終于可以跳過運維和測試部門,自主維護運行環(huán)境(首先是測試/開發(fā)環(huán)境)。

本文是cSphere Docker實戰(zhàn)視頻第二講的文字版,本文聯(lián)合作者@張春源同學(xué)(任職希云cSphere)即為視頻主講人,關(guān)于更多系列視頻,詳見這里。

福利:點擊文末的“實戰(zhàn)視頻”即可手機欣賞本文對應(yīng)的實戰(zhàn)視頻哦。

難者不會,會者不難。通過簡單的4個配置,即可優(yōu)雅地實現(xiàn)持續(xù)部署。本文依慣例放上目錄, 1. 持續(xù)部署的技術(shù)思路 2. 效果展示 3. 配置Git和Jenkins聯(lián)動 4. 配置Jenkins自動更新代碼 5. 效果圖文詳解 6. FAQ

好吧,我們正式開始。

1. 持續(xù)部署的技術(shù)思路

在本例中,假設(shè)我們JAVA項目的名稱為hello。簡要的技術(shù)思路如下。

本案例中假設(shè)代碼托管在git.oschina.com上,Jenkins和Docker Registry(類似于yum源)各運行在一個Docker容器中。JAVA項目自己也單獨運行在一個叫hello的容器中。 本文采取的持續(xù)部署方案,是從私有的Docker Reistry拉取代碼。有些變通的方案,把代碼放在宿主機上,讓容器通過卷組映射來讀取。這種方法不建議的原因是,將代碼拆分出容器,這違背了Docker的集裝箱原則:

這也導(dǎo)致裝卸復(fù)雜度增加。從貨運工人角度考慮,整體才是最經(jīng)濟的。這樣,也才能實現(xiàn)真正意義的容器級遷移。 或者說,容器時代,拋棄過去文件分發(fā)的思想,才是正途。本文最后的問答環(huán)節(jié)對此有更多闡述。 容器即進程。我們采用上述方案做Docker持續(xù)部署的原因和意義,也在于此。容器的生命周期,應(yīng)該遠遠短于虛擬機,容器出現(xiàn)問題,應(yīng)該是立即殺掉,而不是試圖恢復(fù)。

2. 效果展示

本文最后實現(xiàn)的效果,究竟有多驚艷呢?且看如下的演示。

2.1 程序代碼更新前的效果

我們以時間戳來簡潔、顯式的表述程序更新情況。

  2.2 提交程序代碼更新

本例中,我們把首頁的時間戳從201506181750,修改為201506191410(見如下)。

  2.3 上傳新代碼到Git

順序執(zhí)行如下操作,輸入正確的git賬號密碼。

然后呢? 然后什么都不用做了。端杯茶(如果不喜歡咖啡的話),靜靜地等待自動部署的發(fā)生, 旁觀一系列被自動觸發(fā)的過程,機器人似的運轉(zhuǎn)起來(請容稍候再加以描述)。

為什么需要3~5分鐘?只是因為本案例中的JAVA項目,需要從國外download Maven程序包,以供Jenkins調(diào)用和編譯JAVA。正式應(yīng)用環(huán)境中,可以把Maven源放在國內(nèi)或機房。如果僅僅需要對PHP項目做持續(xù)部署,那就更快捷了。

2.4 查看代碼更新后的效果

在靜靜地等待幾分鐘后,新的代碼確實已經(jīng)自動部署完畢。

那么,這一切怎么實現(xiàn)的呢?很復(fù)雜么?不然。只要按照如下幾步,便可快速實現(xiàn)哦。

3. 配置Git和Jenkins聯(lián)動

這個過程也是難者不會,會者不難。主要分為如下三步。

3.1 Jenkins配置Git源

Jenkins中新建項目java-app,并配置從Git拉取程序代碼。具體如下:

  3.2 Jenkins配置遠程構(gòu)建

Jenkins中配置token,以供git遠程調(diào)用時使用。

  3.3 Git開啟鉤子

怎么讓Git在接收到用戶更新的代碼后,把消息和任務(wù)傳遞給Jenkins呢?這借助于Git的hook功能,配置起來也非常簡單,如下。

  4. 配置Jenkins自動更新代碼

Jekins在接收到Git傳遞過來的消息后,再觸發(fā)一個遠程構(gòu)建(到目標服務(wù)器),按照預(yù)定義的任務(wù)列表,執(zhí)行一系列的工作,重建容器等。詳見如下:

  我們把其中最關(guān)鍵的Shell腳本內(nèi)容摘抄出來。

  5. 效果圖文詳解

在2.3這個章節(jié)中,我們當時的操作如下,這個目的是向Git提交更新代碼。

當時并沒有細說后續(xù)發(fā)生的事情,既然上面已經(jīng)說清楚了原理,那我們就可以接下來說說實際發(fā)生的事情啦。

5.1 上傳代碼到Git

這里貌似整個過程已經(jīng)完成并順利退出。其實,后臺的工作才剛剛開始哦。

這時會觸發(fā)Git服務(wù)器向相應(yīng)的Jenkins服務(wù)器發(fā)出一個操作請求,此工作太過迅速,也沒啥好說的,我們接下來看Jenkins都干啥子了。

5.2 Jenkins進行的精彩互動

1)Jenkins會自動"冒出來"一個構(gòu)建任務(wù)。

  2)我們點進來,看看具體操作日志。是的,正在接受來自Git的任務(wù)。

  3)下載Maven相關(guān)的軟件包(就是這個過程慢)。

  4)下載完成后,就開始利用maven BUILD 新的hello項目包。

  5)然后重建Maven容器,構(gòu)建新的Image并Push到Docker私有庫中。

  6)最后,重新把Docker容器拉起來。這樣,又新生了。呵呵

  6. FAQ

問題1:采用這么相對復(fù)雜的辦法(而不是把更新代碼放在宿主機然后卷組映射),是因為項目基于JAVA么;是否PHP項目就可以采用更新代碼放在宿主機然后卷組映射這種方式?

回答1:將代碼拆分出容器,違背了集裝箱原則。導(dǎo)致裝卸復(fù)雜度增加。從貨運工人角度考慮,整體才是最經(jīng)濟的。一切版本化。拋棄過去的文件分發(fā)。這是正途。至于文件大小,大的war包也就50M或100M,在現(xiàn)有網(wǎng)絡(luò)下不成問題,性能問題最好優(yōu)化。另外建議關(guān)注docker 2 docker,p2p傳輸。

問題2:如果整體代碼超過500m或者1g以上,整體集裝箱是否就不太好了?如果容器與代碼分離,鏡像就100m左右(2層,base+服務(wù)),然后代碼的話,是放到共享存儲里,每個代碼有更新,比如svn的代碼,可以直接在共享存儲里進行svn update就可以控制版本

回答2:如果你的代碼500M,那只能說明業(yè)務(wù)開發(fā)該打板子了。

問題3:如果測試環(huán)境使用您提供的完整集裝箱服務(wù)還行,但在生產(chǎn)環(huán)境,集群里運行docker做應(yīng)用,如果每個容器都是有完整的代碼,是否有點臃腫,不如每個集群節(jié)點里就運行基礎(chǔ)服務(wù)鏡像,通過卷組功能綁定共享存儲里的代碼,加上Crontab、Python和Shell腳本,這樣每次代碼更新就1次就行了。

回答3:環(huán)境一致性,在過去從來沒有解決好。10年前我們做PaaS時,和這個做法類似。不是說不好,時代變了,用腳本東拼西湊,終究難有好的系統(tǒng)。不能只考慮現(xiàn)在的方便,容器技術(shù)和vm如果類比,我覺得會讓自己下決定時很糾結(jié)。

補充3:腳本一般是典型的運維工程師思維,quick &dirty。一般很難做成一個產(chǎn)品或者系統(tǒng)。整體考慮和擴展性考慮都比較少。現(xiàn)在做docker的難點在于到底怎么看待它。到底是拿它做調(diào)度的基本單位,還是部署的基本單位考慮清楚,再聊方案。

備注:上述問題的回答,主要由王利俊@cSphere和陳爾冬@華為完成。

作者簡介:

蕭田國,男,碩士畢業(yè)于北京科技大學(xué),觸控科技運維負責(zé)人。擁有十多年運維及團隊管理經(jīng)驗。先后就職于聯(lián)想集團(Oracle數(shù)據(jù)庫主管)、搜狐暢游(數(shù)據(jù)庫主管)、智明星通及世紀互聯(lián)等。從1999年開始,折騰各種數(shù)據(jù)庫如Oracle/MySQL/MS SQL Server/NoSQL等,兼任數(shù)據(jù)庫培訓(xùn)講師若干年。

張春源,目前任職希云cSphere,希云cSphere國際領(lǐng)先的docker管理平臺。國內(nèi)最早期的Docker實踐者,在生產(chǎn)環(huán)境擁有一年多的Docker容器管理經(jīng)歷。深刻理解Docker對于開發(fā)、測試以及運維的價值。擅長利用Docker構(gòu)建整個DevOps自動化平臺。熱愛專研Dockerfile這門藝術(shù),并對CoreOS有深入研究。

關(guān)鍵字:Git自主維護dockerfile

本文摘自:CSDN

x Docker持續(xù)部署圖文詳解 掃一掃
分享本文到朋友圈
當前位置:云計算技術(shù)專區(qū) → 正文

Docker持續(xù)部署圖文詳解

責(zé)任編輯:editor006 作者:蕭田國 張春源 |來源:企業(yè)網(wǎng)D1Net  2015-07-22 15:54:32 本文摘自:CSDN

JAVA項目如何通過Docker實現(xiàn)持續(xù)部署(只需簡單四步),即: 開發(fā)同學(xué)通過git push上傳代碼,經(jīng)Git和Jenkins配合,自動完成程序部署、發(fā)布,全程無需運維人員參與。

這是一種真正的容器級的實現(xiàn),這個帶來的好處,不僅僅是效率的提升,更是一種變革: * 開發(fā)人員第一次真正為自己的代碼負責(zé)——終于可以跳過運維和測試部門,自主維護運行環(huán)境(首先是測試/開發(fā)環(huán)境)。

本文是cSphere Docker實戰(zhàn)視頻第二講的文字版,本文聯(lián)合作者@張春源同學(xué)(任職希云cSphere)即為視頻主講人,關(guān)于更多系列視頻,詳見這里。

福利:點擊文末的“實戰(zhàn)視頻”即可手機欣賞本文對應(yīng)的實戰(zhàn)視頻哦。

難者不會,會者不難。通過簡單的4個配置,即可優(yōu)雅地實現(xiàn)持續(xù)部署。本文依慣例放上目錄, 1. 持續(xù)部署的技術(shù)思路 2. 效果展示 3. 配置Git和Jenkins聯(lián)動 4. 配置Jenkins自動更新代碼 5. 效果圖文詳解 6. FAQ

好吧,我們正式開始。

1. 持續(xù)部署的技術(shù)思路

在本例中,假設(shè)我們JAVA項目的名稱為hello。簡要的技術(shù)思路如下。

本案例中假設(shè)代碼托管在git.oschina.com上,Jenkins和Docker Registry(類似于yum源)各運行在一個Docker容器中。JAVA項目自己也單獨運行在一個叫hello的容器中。 本文采取的持續(xù)部署方案,是從私有的Docker Reistry拉取代碼。有些變通的方案,把代碼放在宿主機上,讓容器通過卷組映射來讀取。這種方法不建議的原因是,將代碼拆分出容器,這違背了Docker的集裝箱原則:

這也導(dǎo)致裝卸復(fù)雜度增加。從貨運工人角度考慮,整體才是最經(jīng)濟的。這樣,也才能實現(xiàn)真正意義的容器級遷移。 或者說,容器時代,拋棄過去文件分發(fā)的思想,才是正途。本文最后的問答環(huán)節(jié)對此有更多闡述。 容器即進程。我們采用上述方案做Docker持續(xù)部署的原因和意義,也在于此。容器的生命周期,應(yīng)該遠遠短于虛擬機,容器出現(xiàn)問題,應(yīng)該是立即殺掉,而不是試圖恢復(fù)。

2. 效果展示

本文最后實現(xiàn)的效果,究竟有多驚艷呢?且看如下的演示。

2.1 程序代碼更新前的效果

我們以時間戳來簡潔、顯式的表述程序更新情況。

  2.2 提交程序代碼更新

本例中,我們把首頁的時間戳從201506181750,修改為201506191410(見如下)。

  2.3 上傳新代碼到Git

順序執(zhí)行如下操作,輸入正確的git賬號密碼。

然后呢? 然后什么都不用做了。端杯茶(如果不喜歡咖啡的話),靜靜地等待自動部署的發(fā)生, 旁觀一系列被自動觸發(fā)的過程,機器人似的運轉(zhuǎn)起來(請容稍候再加以描述)。

為什么需要3~5分鐘?只是因為本案例中的JAVA項目,需要從國外download Maven程序包,以供Jenkins調(diào)用和編譯JAVA。正式應(yīng)用環(huán)境中,可以把Maven源放在國內(nèi)或機房。如果僅僅需要對PHP項目做持續(xù)部署,那就更快捷了。

2.4 查看代碼更新后的效果

在靜靜地等待幾分鐘后,新的代碼確實已經(jīng)自動部署完畢。

那么,這一切怎么實現(xiàn)的呢?很復(fù)雜么?不然。只要按照如下幾步,便可快速實現(xiàn)哦。

3. 配置Git和Jenkins聯(lián)動

這個過程也是難者不會,會者不難。主要分為如下三步。

3.1 Jenkins配置Git源

Jenkins中新建項目java-app,并配置從Git拉取程序代碼。具體如下:

  3.2 Jenkins配置遠程構(gòu)建

Jenkins中配置token,以供git遠程調(diào)用時使用。

  3.3 Git開啟鉤子

怎么讓Git在接收到用戶更新的代碼后,把消息和任務(wù)傳遞給Jenkins呢?這借助于Git的hook功能,配置起來也非常簡單,如下。

  4. 配置Jenkins自動更新代碼

Jekins在接收到Git傳遞過來的消息后,再觸發(fā)一個遠程構(gòu)建(到目標服務(wù)器),按照預(yù)定義的任務(wù)列表,執(zhí)行一系列的工作,重建容器等。詳見如下:

  我們把其中最關(guān)鍵的Shell腳本內(nèi)容摘抄出來。

  5. 效果圖文詳解

在2.3這個章節(jié)中,我們當時的操作如下,這個目的是向Git提交更新代碼。

當時并沒有細說后續(xù)發(fā)生的事情,既然上面已經(jīng)說清楚了原理,那我們就可以接下來說說實際發(fā)生的事情啦。

5.1 上傳代碼到Git

這里貌似整個過程已經(jīng)完成并順利退出。其實,后臺的工作才剛剛開始哦。

這時會觸發(fā)Git服務(wù)器向相應(yīng)的Jenkins服務(wù)器發(fā)出一個操作請求,此工作太過迅速,也沒啥好說的,我們接下來看Jenkins都干啥子了。

5.2 Jenkins進行的精彩互動

1)Jenkins會自動"冒出來"一個構(gòu)建任務(wù)。

  2)我們點進來,看看具體操作日志。是的,正在接受來自Git的任務(wù)。

  3)下載Maven相關(guān)的軟件包(就是這個過程慢)。

  4)下載完成后,就開始利用maven BUILD 新的hello項目包。

  5)然后重建Maven容器,構(gòu)建新的Image并Push到Docker私有庫中。

  6)最后,重新把Docker容器拉起來。這樣,又新生了。呵呵

  6. FAQ

問題1:采用這么相對復(fù)雜的辦法(而不是把更新代碼放在宿主機然后卷組映射),是因為項目基于JAVA么;是否PHP項目就可以采用更新代碼放在宿主機然后卷組映射這種方式?

回答1:將代碼拆分出容器,違背了集裝箱原則。導(dǎo)致裝卸復(fù)雜度增加。從貨運工人角度考慮,整體才是最經(jīng)濟的。一切版本化。拋棄過去的文件分發(fā)。這是正途。至于文件大小,大的war包也就50M或100M,在現(xiàn)有網(wǎng)絡(luò)下不成問題,性能問題最好優(yōu)化。另外建議關(guān)注docker 2 docker,p2p傳輸。

問題2:如果整體代碼超過500m或者1g以上,整體集裝箱是否就不太好了?如果容器與代碼分離,鏡像就100m左右(2層,base+服務(wù)),然后代碼的話,是放到共享存儲里,每個代碼有更新,比如svn的代碼,可以直接在共享存儲里進行svn update就可以控制版本

回答2:如果你的代碼500M,那只能說明業(yè)務(wù)開發(fā)該打板子了。

問題3:如果測試環(huán)境使用您提供的完整集裝箱服務(wù)還行,但在生產(chǎn)環(huán)境,集群里運行docker做應(yīng)用,如果每個容器都是有完整的代碼,是否有點臃腫,不如每個集群節(jié)點里就運行基礎(chǔ)服務(wù)鏡像,通過卷組功能綁定共享存儲里的代碼,加上Crontab、Python和Shell腳本,這樣每次代碼更新就1次就行了。

回答3:環(huán)境一致性,在過去從來沒有解決好。10年前我們做PaaS時,和這個做法類似。不是說不好,時代變了,用腳本東拼西湊,終究難有好的系統(tǒng)。不能只考慮現(xiàn)在的方便,容器技術(shù)和vm如果類比,我覺得會讓自己下決定時很糾結(jié)。

補充3:腳本一般是典型的運維工程師思維,quick &dirty。一般很難做成一個產(chǎn)品或者系統(tǒng)。整體考慮和擴展性考慮都比較少。現(xiàn)在做docker的難點在于到底怎么看待它。到底是拿它做調(diào)度的基本單位,還是部署的基本單位考慮清楚,再聊方案。

備注:上述問題的回答,主要由王利俊@cSphere和陳爾冬@華為完成。

作者簡介:

蕭田國,男,碩士畢業(yè)于北京科技大學(xué),觸控科技運維負責(zé)人。擁有十多年運維及團隊管理經(jīng)驗。先后就職于聯(lián)想集團(Oracle數(shù)據(jù)庫主管)、搜狐暢游(數(shù)據(jù)庫主管)、智明星通及世紀互聯(lián)等。從1999年開始,折騰各種數(shù)據(jù)庫如Oracle/MySQL/MS SQL Server/NoSQL等,兼任數(shù)據(jù)庫培訓(xùn)講師若干年。

張春源,目前任職希云cSphere,希云cSphere國際領(lǐng)先的docker管理平臺。國內(nèi)最早期的Docker實踐者,在生產(chǎn)環(huán)境擁有一年多的Docker容器管理經(jīng)歷。深刻理解Docker對于開發(fā)、測試以及運維的價值。擅長利用Docker構(gòu)建整個DevOps自動化平臺。熱愛專研Dockerfile這門藝術(shù),并對CoreOS有深入研究。

關(guān)鍵字:Git自主維護dockerfile

本文摘自:CSDN

電子周刊
回到頂部

關(guān)于我們聯(lián)系我們版權(quán)聲明隱私條款廣告服務(wù)友情鏈接投稿中心招賢納士

企業(yè)網(wǎng)版權(quán)所有 ©2010-2024 京ICP備09108050號-6 京公網(wǎng)安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 和林格尔县| 许昌市| 丹阳市| 公安县| 龙陵县| 赤峰市| 毕节市| 青海省| 岗巴县| 会同县| 武义县| 寻乌县| 义马市| 长阳| 宁国市| 平乡县| 资中县| 鹤岗市| 赤水市| 依安县| 巴南区| 湾仔区| 包头市| 江阴市| 安阳市| 岑巩县| 象州县| 通许县| 莱芜市| 鄱阳县| 兴化市| 西丰县| 泊头市| 咸阳市| 延津县| 亚东县| 中卫市| 区。| 肥乡县| 定州市| 武清区|