鏡像倉(cāng)庫(kù)
鏡像倉(cāng)庫(kù)有好些地方可以存再榄,大部分的公有云均提供免費(fèi)的鏡像倉(cāng)庫(kù)佑附,常見(jiàn)如下:
騰訊云:https://console.cloud.tencent.com/tke2/registry/user/self?rid=1(需登錄)
阿里云: https://cr.console.aliyun.com/cn-hangzhou/instances/repositories(需登錄)
自建私有倉(cāng)庫(kù)二驰,參考之前的一篇文章docker私有倉(cāng)庫(kù)搭建
Docker Hub:不涉及私密的或者你想公開(kāi)的鏡像可以上傳到https://hub.docker.com/。
打包上傳shell腳本
統(tǒng)一打包流程,每個(gè)項(xiàng)目中添加make.sh腳本文件畸裳,一個(gè)典型的make文件如下:
#!/bin/sh
echo "開(kāi)始制作鏡像..."
image_tag=`date +%Y%m%d` #_%H%M
echo "當(dāng)前時(shí)間:$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 | -
- 命令參數(shù)
命令, 縮寫(xiě) | 描述 |
---|---|
--add-host | 增加自定義主機(jī)和IP映射(host:ip) |
--build-arg | 設(shè)置構(gòu)建時(shí)的變量 |
--cache-from | 用于緩存資源的鏡像 |
--cgroup-parent | 可選的容器上層cgroup |
--compress | 使用gzip 壓縮構(gòu)建context |
--cpu-period | 限制CPU CFS(完全公平調(diào)度程序)周期 |
--cpu-quota | 限制CPU CFS(完全公平調(diào)度程序)配額 |
--cpu-shares , -c | CPU共享(相對(duì)權(quán)重) |
--cpuset-cpus | 允許執(zhí)行的CPU (0-3, 0,1) |
--cpuset-mems | 允許使用的內(nèi)存 (0-3, 0,1) |
--disable-content-trust true | 忽略鏡像驗(yàn)證 |
--file , -f | Dockerfile名稱(chēng) (默認(rèn) ‘PATH/Dockerfile’) |
--force-rm | 始終移除中間容器 |
--iidfile | 鏡像ID寫(xiě)入文件 |
--isolation | 容器隔離技術(shù) |
--label | 設(shè)置鏡像metadata信息 |
--memory , -m | 內(nèi)存限制 |
--memory-swap | 交換限制等于內(nèi)存加交換滑频,“-1”:?jiǎn)⒂脽o(wú)限制交換 |
--network | 在生成期為RUN指令設(shè)置網(wǎng)絡(luò)模式 (API 1.25+) |
--no-cache | 不使用緩存 |
--output , -o | 輸出(格式:type=local,dest=path) (API 1.40+) |
--platform | 如果支持多平臺(tái),則設(shè)置 (experimental (daemon)API 1.32+) |
--progress | 默認(rèn)auto唤冈,設(shè)置進(jìn)度輸出類(lèi)型 (auto, plain, tty). |
--pull | 總是嘗試?yán)∽钚碌溺R像版本 |
--quiet , -q | 不輸出構(gòu)建過(guò)程峡迷,成功時(shí)直接打印鏡像ID |
--rm | 默認(rèn)true,構(gòu)建成功后刪除中間容器 |
--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 選項(xiàng) |
參考已有的范例绘搞,Dockerfile和shell腳本只需要簡(jiǎn)單熟悉一下即可編寫(xiě)彤避。
這一步很關(guān)鍵,是自動(dòng)打包的根本夯辖。make.sh腳本靈活琉预,可執(zhí)行配置文件的替換,多鏡像版本的生成等自定義操作蒿褂。相比自動(dòng)化構(gòu)建平臺(tái)基于Dockerfile和git commit來(lái)構(gòu)建更具靈活性圆米。
jenkins job配置
源碼管理
jenkins會(huì)將git項(xiàng)目拷貝至job目錄下。
構(gòu)建觸發(fā)器
jenkins定時(shí)檢測(cè)代碼變動(dòng)(這里是每分鐘檢測(cè)一次)啄栓,如果發(fā)現(xiàn)有代碼提交記錄娄帖,則觸發(fā)下一步的構(gòu)建。
構(gòu)建
構(gòu)建包括2部分:
- SSH site: SSH的主機(jī)地址
-
Command: 在主機(jī)上執(zhí)行的命令
image
構(gòu)建日志
打包流程
提交代碼
jenkins每分鐘檢測(cè)git倉(cāng)庫(kù)分支的代碼變動(dòng)
若有代碼提交記錄谴供,觸發(fā)下一步構(gòu)建
構(gòu)建過(guò)程調(diào)用項(xiàng)目的make.sh文件块茁,執(zhí)行鏡像打包上傳