一小段學習時間的知識點獨立的,需要一點一點連接組成網。
前要:
-開發提交git的時候要注明版本。
-在Jenkins中,實際分成了兩部分,持續發布一個項目,持續部署是一個項目。分開是因為交付和部署可能不是同一個人。
-182是私有倉庫的IP,170是需要部署的環境。
大概思路:
1、把打包好的鏡像放到哪里去? ------創建私有倉庫。
2、把什么內容,如何放到私有倉庫? -----拉取源碼和對應的版本號,打包成鏡像,推送到私有倉庫。
3、如何拿到已經放好的? -----從私有倉庫自動拉取並啟動鏡像。
4、預期結果? ------輸入訪問地址即可訪問。
一、私有倉庫的創建
docker hub 在線存儲庫可以由任何用戶發布和使用,在涉及隱私項目或者公司處在內網就不太適用了。這就涉及需要到私有存儲庫了。私有倉庫基於registry鏡像。
1、安裝指令
docker pull registry
2、配置私有倉庫地址
#1、執行編輯路徑 vim /etc/docker/daemon.json #2、加入"insecure-registries" "insecure-registries":[192.168.0.182] #3、按esc 輸入: wq 保存 #4、保存之后重啟一下 docker systemctl restart docker
3、創建容器
docker run -d -p 5000:5000 --name registry docker.io/registry
部分參數說明:
- -d:讓容器在后台運行
- -p:指定容器內部使用的網絡端口映射到我們使用的主機上
- --name:指定容器創建的名稱
4、重新加載配置
sudo systemctl daemon-reload
5、重啟一下docker
sudo systemctl daemon-reload
自此私用倉庫 建立已經完成。如果想驗證一下,可以通過docker push 進行推送,然后通過
http://192.168.0.182:5000/v2/_catalog 來驗證是否成功。
二、持續發布
1、勾選項目是參數化 ,選擇git參數,填寫參數名稱(這個名稱要確定好,在后面構建鏡像的時候會用到)

2.輸入源碼地址

3.構建 shell

#構建鏡像
docker build -t 192.168.0.182:5000/ci:$tag .
#推送鏡像到倉庫 -- 交付版本
docker push 192.168.0.182:5000/ci:$tag
4、運行構建:


5、驗證是否成功:
訪問182上的倉庫,已經能夠看到我們打包好提交的鏡像名稱了。

-------------------------------------
遇到的問題:
The push refers to repository [192.168.0.182:5000/ci] Get https://192.168.0.182:5000/v2/: http: server gave HTTP response to HTTPS client
--解決:要在推送所接受的機子(vim /etc/docker/daemon.json)里面加上如下內容:
"insecure-registries": ["192.168.0.182:5000"]
然后再對docker進行重啟
systemctl restart docker.service
三、持續部署
1、版本號參數:
部署部分不用到git源碼了,但是需要設置tag,就是發版的版本號。

tag這個名字是要定義好的,在docker-compose中需要調用這個參數
2、構建:
1、shell
# 復制docker-compose模板文件 cp /home/hww/.jenkins/workspace/jenkins+docker/docker-compose-jenkins-template.yml docker-compose.yml # 修改模板文件中的鏡像版本 sed -i "s/{tag}/$tag/g" docker-compose.yml # 上傳到170,后續在170啟動容器【要部署在哪個的容器】 scp docker-compose.yml root@192.168.0.170:/root/java/jenkins
2.Send files or execute commands over SSH 設置

cd /root/java/jenkins 停止與刪除舊容器 docker-compose down 拉取新鏡像,並啟動新容器 docker-compose up -d
3、啟動構建


4、驗證
docker image查看鏡像

docker ps 查看已經啟動的容器

瀏覽器啟動訪問:

至此,整個流程已經完成。
注意的是:
build 鏡像名稱也要規定好,docker-compose 里面有定義。所以兩者要一樣(imaage/container_name)
version: "3.3" services: hrunmgr: # 這是jenkins發版打包的鏡像,上傳到私有倉庫192.168.0.182 image: 192.168.0.182:5000/hrunmgr:{tag} container_name: hrunmgr environment: - TZ=Asia/Shanghai #network_mode: host #只暴露2個端口 ports: - "8080:8080" - "5555:5555" # 由於jenkins發版打包的鏡像已經構建過代碼,不用重復構建,因此去掉重復代碼 # build: . # volumes: # 映射目錄, 方便讀寫 # - ./:/apps/HttpRunnerManager # #command: "/bin/sh", "-c", "while true; do sleep 100; done" # 讓進程一直跑, 否則容器會exit # entrypoint: /apps/HttpRunnerManager/start.sh