基於Docker部署微服務專案

2021-09-24 23:17:13 字數 1812 閱讀 5072

docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的映象中,然後發布到任何流行的 linux或windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

乙個完整的docker有以下幾個部分組成:

1.dockerclient客戶端

2.docker daemon守護程序

3.docker image映象

4.dockercontainer容器

docker 使用客戶端-伺服器 (c/s) 架構模式,使用遠端api來管理和建立docker容器。docker 容器通過 docker 映象來建立。容器與映象的關係類似於物件導向程式設計中的物件與類。

docker 物件導向

容器 物件

映象 類

docker採用 c/s架構 docker daemon 作為服務端接受來自客戶的請求,並處理這些請求(建立、執行、分發容器)。 客戶端和服務端既可以執行在乙個機器上,也可通過 socket 或者restful api 來進行通訊。

docker daemon 一般在宿主主機後台執行,等待接收來自客戶端的訊息。 docker 客戶端則為使用者提供一系列可執行命令,使用者用這些命令實現跟 docker daemon 互動。

docker並不是全能的,設計之初也不是kvm之類虛擬化手段的替代品,簡單總結幾點:

1.docker是基於linux 64bit的,無法在32bit的linux/windows/unix環境下使用

2.lxc是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的

3.隔離性相比kvm之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫

4.網路管理相對簡單,主要是基於namespace隔離

5.cgroup的cpu和cpuset提供的cpu功能相比kvm的等虛擬化方案相比難以度量(所以dotcloud主要是按記憶體收費)

6.docker對disk的管理比較有限

7.container隨著使用者程序的停止而銷毀,container中的log等使用者資料不便收集

docker核心解決的問題是利用lxc來實現類似vm的功能,從而利用更加節省的硬體資源提供給使用者更多的計算資源。同vm的方式不同, lxc 其並不是一套硬體虛擬化方法 - 無法歸屬到全虛擬化、部分虛擬化和半虛擬化中的任意乙個,而是乙個作業系統級虛擬化方法, 理解起來可能並不像vm那樣直觀。所以我們從虛擬化到docker要解決的問題出發,看看他是怎麼滿足使用者虛擬化需求的。

使用者需要考慮虛擬化方法,尤其是硬體虛擬化方法,需要借助其解決的主要是以下4個問題:

1.隔離性 - 每個使用者例項之間相互隔離, 互不影響。 硬體虛擬化方法給出的方法是vm, lxc給出的方法是container,更細一點是kernel namespace

2.可配額/可度量 - 每個使用者例項可以按需提供其計算資源,所使用的資源可以被計量。硬體虛擬化方法因為虛擬了cpu, memory可以方便實現, lxc則主要是利用cgroups來控制資源

3.移動性 - 使用者的例項可以很方便地複製、移動和重建。硬體虛擬化方法提供snapshot和image來實現,docker(主要)利用aufs實現

4.安全性 - 這個話題比較大,這裡強調是host主機的角度盡量保護container。硬體虛擬化的方法因為虛擬化的水平比較高,使用者程序都是在kvm等虛擬機器容器中翻譯執行的, 然而對於lxc, 使用者的程序是lxc-start程序的子程序, 只是在kernel的namespace中隔離的, 因此需要一些kernel的patch來保證使用者的執行環境不會受到來自host主機的惡意入侵, dotcloud(主要是)利用kernel grsec patch解決的.

基於gokit的微服務專案骨架ko

前段時間發布了乙個小小的web開發專案骨架morningo,效能與效率齊飛,開發速度在短暫時間熟悉go語言後應該是匹配php,ruby等這些指令碼語言,而後期專案併發效能,基本併發到上千乃至上萬tcp連線沒問題。但從業務架構層面看,專案再發展,資料庫存在瓶頸,單體專案耦合度高,可維護性差,可延展性差...

微服務專案架構技術

1.eureka作為註冊中心,實現服務治理 2.管理統一服務入口管理 zuul閘道器 3.http協議 fegin客戶端 ribbon本地負載均衡 4.hystrix服務保護框架 熔斷 降級 隔離 限流 5.微服務訊息匯流排stream rabbitmq和kafka 6.服務追蹤與呼叫鏈關係sleu...

微服務專案之戰 微服務間的呼叫

微服務呼叫介紹,微服務之間的呼叫 一,springcloud微服務之間呼叫的方式有那些?在springcloud中實現微服務呼叫的方式有ribbon feign兩種,他們實現軟負載均衡呼叫。ribbon是乙個基於 http 和 tcp 客戶端 的負載均衡的工具。可以在客戶端配置 ribbonserv...