基于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}
制作流程:
- 更新最新代碼
- 制作鏡像
- 鏡像添加tag滤否,這里tag是當前日期
- 上傳鏡像只騰訊云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)建。