鏡像倉庫
鏡像倉庫有好些地方可以存,大部分的公有雲均提供免費的鏡像倉庫,常見如下:
- 騰訊雲: https://console.cloud.tencent.com/tke2/registry/user/self?rid=1 (需登入)
- 阿裡雲: https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
- 自建私有倉庫,參考之前的一篇文章 docker私有倉庫搭建
- Docker Hub:不涉及私密的或者你想公開的鏡像可以上傳到 https://hub.docker.com/ 。
打包上傳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目錄下。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SMw0iMwVGdz1ycw9mdlR2Lc12bj5yZulmYiNmLjlGcvw1LcpDc0RHaiojIsJye.png)
建構觸發器
jenkins定時檢測代碼變動(這裡是每分鐘檢測一次),如果發現有代碼送出記錄,則觸發下一步的建構。
建構
建構包括2部分:
- SSH site: SSH的主機位址
- Command: 在主機上執行的指令
【DevOps】第二步:Docker鏡像打包上傳至倉庫鏡像倉庫打包上傳shell腳本jenkins job配置打包流程參考
建構日志
打包流程
- 送出代碼
- jenkins每分鐘檢測git倉庫分支的代碼變動
- 若有代碼送出記錄,觸發下一步建構
- 建構過程調用項目的make.sh檔案,執行鏡像打包上傳
參考
https://docs.docker.com/engine/reference/commandline/build/