【Docker】Docker概述

把蘋果v咬哭發表於2021-05-10

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等等,更充分的利用系統資源。

相關文章