【Docker】Docker概述


docker是一個應用容器引擎項目,基於go語言開發,開源。官方文檔也是非常詳細,只不過是英文的,但是只要想看,肯定能克服。
docker火爆至今,鏡像倉庫里的內容也非常豐富了,日常用的環境很多在里面可以直接找到。

1. Docker為什么會出現

先提幾個場景:

  1. 運維幫你開發的項目部署到服務器上,告訴你有問題啟動不起來。你在本地跑了一下發現沒問題...
  2. 要上線的項目因為一些軟件的版本的更新,導致不可用了...
  3. 有項目涉及到的環境內容非常多,各種中間件,各種配置,還要部署好多台服務器...

這些問題其實總結起來就是跟環境有關。
要避開各種因環境不同導致的問題,那么最好是在部署項目的時候,連同項目所需要的各種環境一起部署了最好。
比如,項目中涉及到redis、mysql、jdk、es等環境,在部署jar包的時候把整個環境都帶上。那么問題來了,怎么樣能讓項目帶上環境一起呢?

Docker就是來解決這個問題的!

還是有些不清楚?再來打個比方。
我們在手機按裝個安卓應用,那么從這個應用誕生到被安裝的過程大致是這樣的:

java開發 ——> apk ——> 發布到各大應用商店 ——> 用戶A 下載apk安裝即可使用

站在用戶的角度,我根本不關心這個app需要依賴哪些環境的問題,下載下來安裝就完事兒。按照這個思路,在來看docker:

java開發 ——> jar包 ——> 打包項目帶上各種環境(成為一個鏡像) ——> 鏡像放到docker倉庫里 ——> 運維童鞋下載鏡像,直接運行。

2. Docker的核心思想

這個就是docker的logo,一條裝滿集裝箱的鯨魚,在鯨魚背上,集裝箱相互之間是隔離的,這也就是docker的核心思想了。
比如之前有多個應用在同一台服務器上運行,可能會有軟件的端口占用沖突,現在隔離后就可以獨自運行了。另外,docker可以最大化的利用服務器的能力。

3. Docker和傳統虛擬化的區別

在docker容器技術興起之前,基本上是用虛擬機,比如VM。如果你想在window上裝個linux系統進行一些練習,那么就可以在VM里安裝linux系統。

如圖所示,我在win系統里運行linux系統,那我的win系統就是個宿主機(灰色區域)。藍色部分就相當於是我在vm上安裝的linux系統,從下到上,分別是內核、庫、各種應用,在一台電腦上可以運行很多應用。

但是虛擬機非常的笨重,要虛擬整個系統,軟件硬件都有,一個虛擬機就相當於一台電腦,所以啟動虛擬機占用的資源很大,啟動速度也很慢。

容器技術雖然也屬於虛擬化技術,但是容器非常輕量化。比如linux容器,不再對模擬一個完整的操作系統,如果我只用到linux內核,那其他的東西就可以不要。
將軟件運行所需要的資源打包到一個容器中,並且是隔離的,相當於集裝箱。

如圖所示:
在容器內的應用進程是直接運行於宿主機的內核,容器內沒有自己的內核,更沒有進行硬件的虛擬。容器就不再使用一個公共的lib庫了,每個容器都有一個自己的lib,
只包含運行自己的APP所需要的。容器之間相互隔離,各自有着屬於自己的文件系統,誰也不影響誰,啟動速度也快到了秒級。

4. Docker可以干嘛

  1. 讓應用能夠更快的交付和部署。
    之前部署環境要安裝一堆東西,現在用docker,打包成鏡像發布測試,一鍵運行。
  2. 更便捷的升級和擴容。
    使用docker之后,部署應用簡單得像搭積木。比如項目打包鏡像發布運行后,發現需要增加服務器提高服務性能,那么可以直接在新的服務器上直接下載運行鏡像。
  3. 更簡單的系統運維。
    容器化之后,可以讓開發、測試環境高度一致。
  4. 更高效的計算機資源利用。
    docker是內核級別的虛擬化,可以在一個物理機上運行很多的容器實例。比如一個機子上我同時運行tomcat、es、kibana等等,更充分的利用系統資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM