天天看點

【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

鏡像倉庫

鏡像倉庫有好些地方可以存,大部分的公有雲均提供免費的鏡像倉庫,常見如下:

打包上傳shell腳本

統一打包流程,每個項目中添加make.sh腳本檔案,一個典型的make檔案如下:

#!/bin/sh
echo "開始制作鏡像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "目前時間:$image_tag"
docker build -t ccr.ccs.xxx.com/abc/api:v${image_tag} .
echo "制作鏡像成功!"
 
echo "登入"
docker login
echo "鏡像版本送出"
docker push ccr.ccs.xxx.com/abc/api:v${image_tag}
 
echo "鏡像最新版本送出"
docker tag ccr.ccs.xxx.com/abc/api:v${image_tag} ccr.ccs.xxx.com/abc/api:latest
docker push ccr.ccs.xxx.com/abc/api:latest           
注:Dockerfile和make.sh在同一目錄下。

docker build 指令用法

docker build [OPTIONS] PATH | URL | -           
  • 指令參數
指令, 縮寫 描述
--add-host 增加自定義主機和IP映射(host:ip)
--build-arg 設定建構時的變量
--cache-from 用于緩存資源的鏡像
--cgroup-parent 可選的容器上層cgroup
--compress 使用gzip 壓縮建構context
--cpu-period 限制CPU CFS(完全公平排程程式)周期
--cpu-quota 限制CPU CFS(完全公平排程程式)配額
--cpu-shares , -c CPU共享(相對權重)
--cpuset-cpus 允許執行的CPU (0-3, 0,1)
--cpuset-mems 允許使用的記憶體 (0-3, 0,1)
--disable-content-trust true 忽略鏡像驗證
--file , -f Dockerfile名稱 (預設 ‘PATH/Dockerfile’)
--force-rm 始終移除中間容器
--iidfile 鏡像ID寫入檔案
--isolation 容器隔離技術
--label 設定鏡像metadata資訊
--memory , -m 記憶體限制
--memory-swap 交換限制等于記憶體加交換,“-1”:啟用無限制交換
--network 在生成期為RUN指令設定網絡模式 (API 1.25+)
--no-cache 不使用緩存
--output , -o 輸出(格式:type=local,dest=path) (API 1.40+)
--platform 如果支援多平台,則設定 (experimental (daemon)API 1.32+)
--progress 預設auto,設定進度輸出類型 (auto, plain, tty).
--pull 總是嘗試拉取最新的鏡像版本
--quiet , -q 不輸出建構過程,成功時直接列印鏡像ID
--rm 預設true,建構成功後删除中間容器
--secret API 1.39+ Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret
--security-opt Security options
--shm-size Size of /dev/shm
--squash experimental (daemon)API 1.25+ Squash newly built layers into a single new layer
--ssh SSH agent socket or keys to expose to the build (only if BuildKit enabled)
--stream (experimental (daemon)API 1.31+ ) Stream attaches to server to negotiate build context
--tag , -t 鏡像名和tag,格式為‘name:tag’
--target Set the target build stage to build.
--ulimit Ulimit 選項

參考已有的範例,Dockerfile和shell腳本隻需要簡單熟悉一下即可編寫。

這一步很關鍵,是自動打包的根本。make.sh腳本靈活,可執行配置檔案的替換,多鏡像版本的生成等自定義操作。相比自動化建構平台基于Dockerfile和git commit來建構更具靈活性。

jenkins job配置

源碼管理

jenkins會将git項目拷貝至job目錄下。

【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

建構觸發器

jenkins定時檢測代碼變動(這裡是每分鐘檢測一次),如果發現有代碼送出記錄,則觸發下一步的建構。

【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

建構

建構包括2部分:

  • SSH site: SSH的主機位址
  • Command: 在主機上執行的指令
    【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

建構日志

【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

打包流程

  1. 送出代碼
  2. jenkins每分鐘檢測git倉庫分支的代碼變動
  3. 若有代碼送出記錄,觸發下一步建構
  4. 建構過程調用項目的make.sh檔案,執行鏡像打包上傳
【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考

參考

https://docs.docker.com/engine/reference/commandline/build/

繼續閱讀