新技術發展總是有一個過程,有時掌握它並不是那么容易,即使我們可以從課本學習一些知識,但是沒有足夠的實踐經驗支撐,往往很難做到精通,docker走進我的視野很久了,有幸能在項目中做到真正的實踐。故而想分享給大家在生產中使用docker的一種架構,滿足高可用、持續集成。
1. 服務架構
DNS --> traefik集群 --> 業務服務
traefik是新型的反向代理工具,跟nginx的反向代理是同一性質的,它比nginx有趣的是比較親和容器,而且還支持通過給docker容器打上標簽來做負載均衡(相比nginx一般用ip,當然traefik也支持用ip),可以在部署服務的時候,給docker容器貼上相同的服務標簽,而不是指定ip,總體比較簡單;另外它和可以做到服務發現、以及路由規則動態生效(nginx需要重啟)。
相關文檔可參考:https://docs.traefik.io/
2. 部署架構
代碼倉庫(github、gitee) --> jenkins/pipeline --> docker集群(swarm、k8s)
以上就是整體的部署架構,也非常的簡單,那就看看具體是怎么實踐的吧,好的思想,不能落地,也是沒有意義的。本人是一枚java開發人員,此處的業務服務采用springboot2框架,docker集群為swarm(相比k8s簡單、上手快),gitee(支持國產),持續集成工具采用業界知名的jenkins/pipeline(功能確實強大),宿主機操作系統為
ubuntu 18.04。
1. 業務服務:springboot2
簡單的使用了一下,整體只保留了配置文件(支持多環境)以及控制器,詳情可參考代碼倉:https://gitee.com/hx-studio/docker-jenkins
其中Jenkinsfile為jenkins pipeline控制腳本,等下會說明如何使用
dockerfile為該服務的鏡像構建配置文件
docker-stack為該服務的swarm集群部署腳本
2. 部署traefik
參考項目目錄下的docker-traefik.yml
記得把本例域名app.winter.com指向swarm manager節點ip(192.168.0.104),修改/etc/hosts
2. 持續構建使用
關於jenkins搭建,網上很多,這里就略過了,在jenkins里面新創建pipeline的item,按下圖填入git倉庫地址,並指定Jenkinsfile相對路徑,整個流水線就創建完畢了(是不是很簡單,真正做到代碼即部署)