Docker鏡像自動構(gòu)建

原文地址

基于Git的代碼版本控制袖牙,能保證每個開發(fā)人員的開發(fā)成果得到有效的保護朽缎,不會發(fā)生因為其他人的“誤操作”操作將自己辛辛苦苦寫的代碼刪除续滋,而且能夠跟蹤每一次的改動翰守,能快速回滾到之前任一版本。
基于Docker鏡像的版本控制疲酌,能保證應(yīng)用服務(wù)的正常迭代更新蜡峰,某一版本出問題了可以快速切換至其他鏡像版本了袁。

1,鏡像倉庫

鏡像的版本控制湿颅,主要是通過給image加tag來區(qū)分载绿。首先,我們需要一個鏡像倉庫油航,最好是私有倉庫崭庸。目前國內(nèi)阿里云和騰訊云都提供免費的私有鏡像服務(wù),當然谊囚,我們還可以自己搭建私有鏡像倉庫怕享。

1.1,騰訊云鏡像倉庫:(https://console.qcloud.com/ccs

1.2镰踏,阿里云鏡像倉庫:(https://cr.console.aliyun.com

1.3函筋,自建私有倉庫

參考本人博客: docker私有倉庫搭建

2, 上傳鏡像

以騰訊云鏡像倉庫為例。先開通鏡像倉庫奠伪,然后在命令行登錄:

$ docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
Login Succeeded

username:騰訊云賬號跌帐,p為密碼

本地鏡像上傳

$ sudo docker tag [ImageId] ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[鏡像版本號]
$ sudo docker push ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[鏡像版本號]

例如:

$ docker tag fof_api:v20170808 ccr.ccs.tencentyun.com/sk/api:v20170808
$ docker push ccr.ccs.tencentyun.com/sk/api:v20170808

3, 下載鏡像

$ docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
$ docker pull ccr.ccs.tencentyun.com/sk/api:v20170808

4,鏡像制作

4.1 API鏡像自動構(gòu)建

API是基于python的Django框架編寫的绊率。在項目的根目錄定義好Dockerfile和requirements.txt谨敛,具體參考docker版Django。然后定義Shell腳本(make.sh):

# make.sh
#!/bin/sh
git pull
echo "開始制作鏡像..."
image_tag=`date +%Y%m%d_%H%M`
echo "當前時間:$image_tag"
docker build -t ccr.ccs.tencentyun.com/sk/api:${image_tag} .
echo "制作鏡像成功!"

docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
docker push ccr.ccs.tencentyun.com/sk/api:${image_tag}

制作流程:

  1. 更新最新代碼
  2. 制作鏡像
  3. 鏡像添加tag滤否,這里tag是當前日期
  4. 上傳鏡像只騰訊云docker倉庫

4.2 Web應(yīng)用鏡像自動構(gòu)建

Web應(yīng)用是用maven搭建的SpringMVC+MyBatis項目佣盒。打包生成war包可以通過maven命令行在服務(wù)器上執(zhí)行。這里我們采用的服務(wù)器是centos7.3顽聂,java版本是1.8,maven版本是3.3.9盯仪。

$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_111/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-514.21.2.el7.x86_64", arch: "amd64", family: "unix"

在服務(wù)器上安裝好java紊搪,maven后,配置maven repository路徑:apache-maven-3.3.9/conf/settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/your/path/apache-maven-3.3.9/repository</localRepository>
    ...
</settings>
   

4.2.1 war包生成腳本

#mvn_on_centos.sh
#!/bin/sh
APP_PATH="/mydata/code/build/fofweb"
cd ${APP_PATH}/dzmsoft-ccs
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/dzmsoft-ucs
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy-base
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy-backstage
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeay-report
mvn clean
mvn install -DskipTests
cd ${APP_PATH}/fofeasy
mvn clean
mvn install -DskipTests

cd /mydata/code/deploy/web_war
mkdir ./ROOT
cd ROOT
cp /mydata/code/build/fofweb/fofeasy/target/fofeasy.war .
jar xvf fofeasy.war
rm fofeasy.war
cd ..
rm ROOT.tar.gz
tar czf ROOT.tar.gz ./ROOT
rm -rf ROOT/

這里全景,我們先生成fofeasy.war包耀石,然后將war包移到腳本所在目錄解壓,打包成tar.gz爸黄。

4.2.2 鏡像制作及上傳

#make_power_image_on_centos.sh
#!/bin/sh

MVN_PATH="/mydata/code/deploy/web_war"
echo "MVN_PATH:${MVN_PATH}"
echo "開始生成WAR包..."
${MVN_PATH}/mvn_on_centos.sh
echo "WAR包生成成功滞伟!"

echo "復(fù)制War包到source目錄"
cp ${MVN_PATH}/ROOT.tar.gz source/
echo "復(fù)制完成"

echo "開始制作鏡像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "當前時間:$image_tag"
docker build -t ccr.ccs.tencentyun.com/sk/power:v${image_tag} .
echo "制作鏡像成功!"

docker login --username=yourname -p=yourpassword ccr.ccs.tencentyun.com
docker push ccr.ccs.tencentyun.com/sk/power:v${image_tag}
echo "上傳鏡像成功!"

5,鏡像使用

本地push鏡像(需先登錄)

$ docker push ccr.ccs.tencentyun.com/sk/api:[tag]

上傳成果的鏡像在鏡像倉庫能看到:


還可以在后臺自動構(gòu)建炕贵,關(guān)聯(lián)github工程梆奈,指定Dockerfile,commit觸發(fā)自動構(gòu)建称开。

PS: commit觸發(fā)自動構(gòu)建亩钟,在阿里云和騰訊云上測試沒成果乓梨,需手動構(gòu)建。

參考

使用阿里云免費構(gòu)建docker私有倉庫
Centos 下maven的安裝與配置~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末清酥,一起剝皮案震驚了整個濱河市扶镀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰轻,老刑警劉巖臭觉,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辱志,居然都是意外死亡蝠筑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門荸频,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱肖,“玉大人,你說我怎么就攤上這事旭从∥惹浚” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵和悦,是天一觀的道長退疫。 經(jīng)常有香客問我,道長鸽素,這世上最難降的妖魔是什么褒繁? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮馍忽,結(jié)果婚禮上棒坏,老公的妹妹穿的比我還像新娘。我一直安慰自己遭笋,他們只是感情好坝冕,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓦呼,像睡著了一般喂窟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央串,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天磨澡,我揣著相機與錄音,去河邊找鬼质和。 笑死稳摄,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的饲宿。 我是一名探鬼主播秩命,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尉共,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弃锐?” 一聲冷哼從身側(cè)響起袄友,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霹菊,沒想到半個月后剧蚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡旋廷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年鸠按,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饶碘。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡目尖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扎运,到底是詐尸還是另有隱情瑟曲,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布豪治,位于F島的核電站洞拨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏负拟。R本人自食惡果不足惜烦衣,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掩浙。 院中可真熱鬧花吟,春花似錦、人聲如沸厨姚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遣蚀。三九已至,卻和暖如春纱耻,著一層夾襖步出監(jiān)牢的瞬間芭梯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工弄喘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玖喘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓蘑志,卻偏偏與公主長得像累奈,于是被迫代替她去往敵國和親贬派。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容