淺談微服務的自動化部署

一、常用部署工具

jenkins,docker生態是比較常用的工具,本文也主要是聊這幾個。其他如Kubernetes (K8s),Ansible,GitLab CI/CD等工具本文只是暫時提一下,不展開討論。

二、比較jenkins和docker生態

1、jenkins

優點

jenkins功能豐富,而且配置比較靈活。比如支持git,maven,gitee或github庫,SSH。對于普通的javaweb項目的部署還是很方便的。

缺點

但是對于初學者來說,要學習的不少,配置的東西不少。

如果在服務器比較多的情況下,配置還是比較繁瑣的。

適用場景

比較適合在聯調或測試環境去用。

2、docker生態

注意,我這里用的是生態二字。docker生態的工具還是比較豐富的,比如docker, harbor,portainer, docker-compose,docker-swarm。

docker

docker有個對自動化部署來說特別好的東西,叫鏡像。這個東西可以把環境,安裝程序,文件資源都打包存儲起來,放到鏡像倉庫,如私服harbor。那這樣鏡像就可以在多臺節點的集群中復用,快速部署。而且鏡像是分層繼承的,這使得容器部署對于環境的復用和擴展就更加靈活。

可以通過dockerfile來制作鏡像,示例如下。也可以基于容器制作鏡像。

# 基于 openjdk:8-jre 為基礎鏡像進行構建
FROM java:8   
# 指定進入這個容器的目錄。一般可放到公共的有權限的目錄,比如/usr/local。看鏡像的目錄結構可以進入創建的容器之后去看。
WORKDIR /usr/local/demo3
# 將jar包放入/app目錄下,并重新命名為app.jar
ADD demo-0.0.1-SNAPSHOT.jar app.jar
# 該項目使用的是8081端口,所有需要向外暴漏8081端口,日后才能通過映射的端口去訪問這個暴漏的端口
EXPOSE 8081
# ENTRYPOINT 和 CMD 結合使用,ENTRYPOINT固定命令,CMD根據參數的不同 運行不同的jar包(動態參數)
ENTRYPOINT ["java","-jar"] 
CMD ["app.jar"]
# 相當于 java -jar xxx.jar

不建議頻繁使用容器提交方式創建鏡像,因為通過提交容器的方式,我們無法追溯詳細的變更操作,這會導致鏡像構建過程缺乏透明度和可重復性。

docker-compose

很適合中小型公司在單臺機器上部署服務。配置靈活方便。結合portainer頁面配合使用特別好用,它在docker的鏡像名是portainer/portainer,可用于管理docker棧、容器、鏡像,還可以用于連接容器命令行。

docker-compose.yml示例如下

#compose版本
version: "3"  #微服務項目	
services:portainer:#docker可視化界面  image: portainer/portainer:1.24.2container_name: portainerports:- "9000:9000"#數據卷volumes:- /var/run/docker.sock:/var/run/docker.sock- /docker/data/portainer:/datanetworks: - network_testdemo01:#微服務鏡像  image: demo:1container_name: demo01ports:- "9080:9080"#數據卷# volumes:#   - /app/microService:/datanetworks: - network_test depends_on: - nginx01- redis- mysql#redis服務nginx01:image: nginx:1.21.5container_name: nginx01ports:- "80:80"volumes:- /docker/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /docker/data/nginx/conf/conf.d:/etc/nginx/conf.d- /docker/data/nginx/log:/var/log/nginx- /docker/data/nginx/html:/etc/nginx/htmlnetworks: - network_testrestart: always#redis服務redis:image: redis:6.0.8ports:- "6379:6379"volumes:- /docker/data/redis/redis.conf:/etc/redis/redis.conf- /docker/data/redis/data:/datanetworks: - network_testcommand: redis-server /etc/redis/redis.conf#mysql服務mysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: '123456'MYSQL_ALLOW_EMPTY_PASSWORD: 'no'MYSQL_DATABASE: 'db2024'MYSQL_USER: 'test'MYSQL_PASSWORD: 'test1234'ports:- "3306:3306"volumes:- /docker/data/mysql/db:/var/lib/mysql- /docker/data/mysql/conf/my.cnf:/etc/my.cnf- /docker/data/mysql/init:/docker-entrypoint-initdb.dnetworks:- network_testcommand: --default-authentication-plugin=mysql_native_password #解決外部無法訪問#創建自定義網絡
networks: network_test: 

docker-swarm

一個類似于k8s的云原生集群部署工具。支持容器編排、自動擴縮容、自我故障恢復等等,相當強大,雖然支持的節點有上限,但除了一線互聯網公司的業務規模,需求上中小型公司基本都能滿足了。

優點

尤其docker-compose和docker-swarm很適合服務多的時候使用,部署效率高。

缺點

鏡像的制作比較麻煩,比如編寫dockerfile制作,很容易語法出錯,學習成本較高。

鏡像庫需要額外配置,通過harbor搭建私庫,或者通過國內公共鏡像庫。但是公共鏡像庫要么有網速問題,要么有鏡像版本比較老的問題。

鏡像中不適合放太多東西,不然鏡像就會很大。比如把git拉取代碼,maven構筑放進去,那么代碼和依賴的倉庫都很大,所以只適合放環境、環境參數、安裝程序和其他比較輕量的東西。

docker-compose使用比較局限,只能單機。集群架構要配合docker-swarm一起用。

適用場景

生產環境或服務節點多的場景

三、使用感想

總結,jenkins用war包形式運行很方便,而且使用jenkins通過git拉取代碼和maven打包springboot微服務也很方便。

docker生態在集群管理,自動化擴容縮容,交付物和環境的復用等方面很牛。

我在想如果兩者結合一下應該有不錯的使用體驗,比如通過jenkins打包,發布到其中一臺或多臺服務器,然后通過docker來發布鏡像,容器的部署。還有,maven有集成docker鏡像制作和發布的插件,可以通過maven命令進行鏡像的發布,所以完全能這么干,我猜想很多公司也這么干了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14665.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust使用rust_xlsxwriter庫把Vec數據寫入Excel

一、Rust使用rust_xlsxwriter庫把一維Vec數據寫入Excel 在Rust中,使用rust_xlsxwriter庫將一維Vec數據寫入Excel文件是一個相對簡單的過程。首先,你需要確保你的Cargo.toml文件中已經添加了rust_xlsxwriter依賴。以下是如何添加依賴的示例: …

KMP題解代碼(含講解)

目錄 注意: next數組的變化規律: 初始化: 求next數組部分: KMP部分: AC代碼: 題目鏈接:【模板】KMP - 洛谷 注意: 1、next數組是針對子串的,并未涉及母串,因此求next數組時…

Python中文件操作和異常處理

文章目錄 一、文件操作1.概念2.文件3.二進制 二、基本文件操作三、亂碼產生四、with open() as f五、代碼實現文件復制粘貼六、try ... except ...七、代碼比較 一、文件操作 1.概念 幫助我們把爬蟲抓下來的數據,進行保存。 2.文件 在計算機中,沒有p…

Linux:linux基礎

Linux 一套免費使用和自由傳播的操作系統 linux特點 免費,開源,多用戶(同時允許多用戶操作同一個Linux系統),多任務(同時允許多個任務執行) linux版本 分為內核版和發行版 內核版 由linus torvalds及其團隊進行開發和維護 免費,開源 負責控制硬件 發行版 基于linux內…

Luat學習

萬物互聯的興起 人與人之間的連接已經變得越來越緊密,至少在中國這是一個不爭的事實。 人們的忙碌程度也達到了前所未有的水平,這時候人的通訊能力反而成為了瓶頸,人與外界的信息交換方式無外乎是嘴說、耳朵聽、眼睛看、手指敲、每秒的傳輸速…

根據配置的mode環境顯示不同的index模板

引言:在項目開發中,遇到了開發環境和生產環境使用模板不同的情況,配置如下: 一、vue.config.js const path require(path) function resolve(dir){return path.join(__dirname,dir) } module.exports {chainWebpack: config &g…

力扣226. 翻轉二叉樹(DFS的兩種思路)

Problem: 226. 翻轉二叉樹 文章目錄 題目描述思路復雜度Code 題目描述 思路 涉及二叉樹的遞歸解法時往往需要考慮兩種思路: 1.在遞歸遍歷時執行題目需要的具體要求; 2.將一個大問題分解為多個小子問題 具體到本體: 思路1:遍歷 先…

【源碼分享】簡單的404 HTML頁面示例,該頁面在加載時會等待2秒鐘,然后自動重定向到首頁

展示效果 源碼 html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>404 頁面未找到</title><meta http-equiv"refresh" content"2;url/"> <!-- 設置2秒后跳轉到首…

機器學習云環境測試

等待創建完成后&#xff0c;點擊 PyTorch 打開&#xff0c;創建一個全新的 notebook 在 Cell 中輸入如下代碼&#xff0c;并點擊 Run 完成后點擊 New Cell &#xff0c;在 New Cell 中輸入如下代碼 輸入完成后點擊 Run &#xff0c;運行 New Cell 。&#xff08;每個 Cell 代…

1077: 平衡二叉樹的判定

解法&#xff1a; 平衡二叉樹是一種特殊的二叉樹&#xff0c;它滿足以下兩個條件&#xff1a; 左子樹和右子樹的高度差不超過1&#xff08;即&#xff0c;左右子樹高度差的絕對值不超過1&#xff09;。左子樹和右子樹都是平衡二叉樹。 后序遍歷過程中每次判斷左右子樹高度差…

python列表底層原理

Python 列表&#xff08;list&#xff09;是 Python 中非常常用的數據結構之一。它們的底層實現基于動態數組&#xff0c;具體來說&#xff0c;是一個可以動態調整大小的數組。這使得列表在操作和使用上非常靈活。以下是 Python 列表底層實現的主要原理&#xff1a; 動態數組 …

IT廉連看——UniApp——事件綁定

IT廉連看——UniApp——事件綁定 這是我們上節課最終的樣式&#xff1b; 一、現在我有這樣一個需求&#xff0c;當我點擊“生在國旗下&#xff0c;長在春風里”它的顏色由紅色變為藍色&#xff0c;該怎么操作&#xff1f; 這時候我們需要一個事件的綁定&#xff0c;綁定一個單…

使用 Docker 部署 Jenkins 并設置初始管理員密碼

使用 Docker 部署 Jenkins 并設置初始管理員密碼 每一次開始&#xff0c;我都特別的認真與膽怯&#xff0c;是因為我期待結局&#xff0c;也能夠不會那么粗糙&#xff0c;不會讓我失望&#xff0c;所以&#xff0c;就多了些思考&#xff0c;多了些拘束&#xff0c;所以&#xf…

【HCIP學習】STP協議

一、STP協議出現背景&#xff08;Spanning Tree Protocol&#xff0c;生成樹協議&#xff09; 二層環路帶來的問題&#xff1a;廣播風暴&#xff1b; MAC地址表的震蕩&#xff1b; 二、STP定義 stp是二層網絡中用于消除環路的協議&#xff0c;通過阻斷冗余鏈路來消除&#xff…

Flutter 中的 Hero 小部件:全面指南

Flutter 中的 Hero 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Hero 動畫是一種流行的動畫效果&#xff0c;用于在不同路由&#xff08;頁面&#xff09;之間傳遞小部件&#xff0c;從而創建平滑的共享元素過渡效果。這種動畫可以增強用戶的視覺體驗&#xff0c;使…

加速度傳感器的沖擊振動的原始特征與解算(部分)

這里是工作中測得的一組數據&#xff0c;設備有多個加速度傳感器通道&#xff0c;我們可以看到沖擊振動發生前后&#xff0c;各個振動傳感器的的反饋以及其他的細化特征&#xff1a; 1.隨機振動&#xff08;加速度傳感器視角&#xff09; 2.沖擊振動&#xff08;加速度&#x…

Android Settings系統屬性讀寫

Settings系統屬性存儲均為xml&#xff0c;分三種&#xff1a; 1.global&#xff1a;所有的偏好設置對系統的所有用戶公開&#xff0c;第三方APP有讀沒有寫的權限&#xff1b; 源碼地址&#xff1a;frameworks/base/core/java/android/provider/Settings.java 對應xml路徑&…

C++ 網絡編程

一、Reactor 網絡編程模型 reactor 是一個事件處理模型。網絡處理:因為用戶層并不知道 IO 什么時候就緒,所以將對 IO 的處理轉化為對事件的處理。網絡模型構成: 非阻塞 IO:操作 IO,如果 IO 未就緒,IO 函數會立刻返回。IO 多路復用:檢測多路 IO 是否就緒。工作流程: 注冊…

【從零開始實現stm32無刷電機FOC】【理論】【1/6 電機旋轉本質】

目錄 電機旋轉需要什么樣的力&#xff1f;怎么產生力矢量&#xff1f;怎么產生任意的線圈磁矢量&#xff1f; 電機旋轉需要什么樣的力&#xff1f; 電機切向存在受力&#xff0c;電機就會旋轉。 進一步查看電機結構&#xff0c;分為轉子和定子&#xff0c;大部分情況下&#…

Spark的概述、核心、組成、運行模式

一、Spark概述 Apache Spark 是一個快速的, 多用途的集群計算系統, 相對于 Hadoop MapReduce 將中間結果保存在磁盤中, Spark 使用了內存保存中間結果, 能在數據尚未寫入硬盤時在內存中進行運算。Spark 是一個計算框架&#xff0c;可以用來代替Hadoop中的MapReduce計算框架。 二…