Docker鏡像自動構建

原文地址

基于Git的代碼版本控制,能保證每個開發人員的開發成果得到有效的保護,不會發生因為其他人的“誤操作”操作將自己辛辛苦苦寫的代碼刪除,而且能夠跟蹤每一次的改動,能快速回滾到之前任一版本。
基于Docker鏡像的版本控制,能保證應用服務的正常迭代更新,某一版本出問題了可以快速切換至其他鏡像版本。

1,鏡像倉庫

鏡像的版本控制,主要是通過給image加tag來區分。首先,我們需要一個鏡像倉庫,最好是私有倉庫。目前國內阿里云和騰訊云都提供免費的私有鏡像服務,當然,我們還可以自己搭建私有鏡像倉庫。

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鏡像自動構建

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應用鏡像自動構建

Web應用是用maven搭建的SpringMVC+MyBatis項目。打包生成war包可以通過maven命令行在服務器上執行。這里我們采用的服務器是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"

在服務器上安裝好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 "復制War包到source目錄"
cp ${MVN_PATH}/ROOT.tar.gz source/
echo "復制完成"

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]

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


還可以在后臺自動構建,關聯github工程,指定Dockerfile,commit觸發自動構建。

PS: commit觸發自動構建,在阿里云和騰訊云上測試沒成果,需手動構建。

參考

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Docker — 云時代的程序分發方式 要說最近一年云計算業界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,627評論 15 147
  • |-1-更新內容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構件,在ma...
    zlcook閱讀 6,150評論 0 25
  • 下午和大學閨蜜談到現在的狀態,一年的摸爬滾打,日子終于逐漸明朗。 于是想起了胡適的“怕什么真理無窮,進一寸有一寸的...
    陳未晚閱讀 339評論 0 0
  • **一、分析 **數組在實際的系統開發中使用的越來越少,我們通常只有在閱讀一些開源項目時才會看到它們的身影,在Ja...
    Viking_Den閱讀 211評論 0 0
  • 作者:Vik Paruchuri譯者:Nick Tang校對:EarlGrey出品:PythonTG 翻譯組/編程...
    EarlGrey閱讀 1,400評論 0 8