初识Docker-什么是docker
什么是Docker
微服務雖然具備各種各樣的優勢,但服務的拆分通用給部署帶來了很大的麻煩。
-
分布式系統中,依賴的組件非常多,不同組件之間部署時往往會產生一些沖突。
-
在數百上千臺服務中重復部署,環境不一定一致,會遇到各種問題
應用部署的環境問題
大型項目組件較多,運行環境也較為復雜,部署時會碰到一些問題:
-
依賴關系復雜,容易出現兼容性問題
-
開發、測試、生產環境有差異
例如一個項目中,部署時需要依賴于node.js、Redis、RabbitMQ、MySQL等,這些服務部署時所需要的函數庫、依賴項各不相同,甚至會有沖突。給部署帶來了極大的困難。
Docker解決依賴兼容問題
而Docker確巧妙的解決了這些問題,Docker是如何實現的呢?
Docker為了解決依賴的兼容問題的,采用了兩個手段:
-
將應用的Libs(函數庫)、Deps(依賴)、配置與應用一起打包
-
將每個應用放到一個隔離容器去運行,避免互相干擾
?
這樣打包好的應用包中,既包含應用本身,也保護應用所需要的Libs、Deps,無需再操作系統上安裝這些,自然就不存在不同應用之間的兼容問題了。
雖然解決了不同應用的兼容問題,但是開發、測試等環境會存在差異,操作系統版本也會有差異,怎么解決這些問題呢?
Docker解決操作系統環境差異
要解決不同操作系統環境差異問題,必須先了解操作系統結構。以一個Ubuntu操作系統為例,結構如下:
?
結構包括:
-
計算機硬件:例如CPU、內存、磁盤等
-
系統內核:所有Linux發行版的內核都是Linux,例如CentOS、Ubuntu、Fedora等。內核可以與計算機硬件交互,對外提供內核指令,用于操作計算機硬件。
-
系統應用:操作系統本身提供的應用、函數庫。這些函數庫是對內核指令的封裝,使用更加方便。
應用于計算機交互的流程如下:
1)應用調用操作系統應用(函數庫),實現各種功能
2)系統函數庫是對內核指令集的封裝,會調用內核指令
3)內核指令操作計算機硬件
Ubuntu和CentOSpringBoot都是基于Linux內核,無非是系統應用不同,提供的函數庫有差異:
此時,如果將一個Ubuntu版本的MySQL應用安裝到CentOS系統,MySQL在調用Ubuntu函數庫時,會發現找不到或者不匹配,就會報錯了:
Docker如何解決不同系統環境的問題?
-
Docker將用戶程序與所需要調用的系統(比如Ubuntu)函數庫一起打包
-
Docker運行到不同操作系統時,直接基于打包的函數庫,借助于操作系統的Linux內核來運行
如圖:
小結
Docker如何解決大型項目依賴關系復雜,不同組件依賴的兼容性問題?
-
Docker允許開發中將應用、依賴、函數庫、配置一起打包,形成可移植鏡像
-
Docker應用運行在容器中,使用沙箱機制,相互隔離
Docker如何解決開發、測試、生產環境有差異的問題?
-
Docker鏡像中包含完整運行環境,包括系統函數庫,僅依賴系統的Linux內核,因此可以在任意Linux操作系統上運行
Docker是一個快速交付應用、運行應用的技術,具備下列優勢:
-
可以將程序及其依賴、運行環境一起打包為一個鏡像,可以遷移到任意Linux操作系統
-
運行時利用沙箱機制形成隔離容器,各個應用互不干擾
-
啟動、移除都可以通過一行命令完成,方便快捷
總結
以上是生活随笔為你收集整理的初识Docker-什么是docker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gateway网关-网关的cors跨域配
- 下一篇: 初始Docker-Docker和虚拟机的