謝邀~
我們單位最近在推docker,已經在開發測試環境使用(稍顯落后),下面我就談談自己的Docker的理解,以及Docker和虛擬機的區別。
虛擬機先說說什么是虛擬機:在一臺物理機器上,利用虛擬化技術,虛擬出來多個操作系統,每個操作系統之間是隔離的。
說起來有些繞,那么我們看看虛擬機的架構圖,就容易理解了。例如我們要在一臺物理機器運行三個Java項目,彼此之間隔離。
從下往上看,解釋起來其實很簡單:
最下面的一層就是物理機,可以是服務器,設置是一臺個人電腦;
電腦上需要安裝操作系統,比如我們安裝了win10的操作系統;
再往上就是虛擬機軟件了,比如我們常用的VirtualBox、VMWare,它們的作用是模擬計算機硬件;
繼續向上,就是虛擬機模擬出來的操作系統了;
在虛擬的操作系統中,安裝所需的軟件、組件等。比如我們需要在虛擬操作系統中安裝JDK、Tomcat等;
最后就是具體的應用了,例如部署到Tomcat中。
Docker再說說什么是Docker,找了一句官方的解釋:Docker是開源的應用容器引擎。是不是又一頭霧水?我們還是先看看Docker的架構圖。
依然從下往上看:
最下面兩層,概念同上。
往上,可以看做Docker容器的管理器。
依賴和應用都被打包成了Docker鏡像。例如,JDK、Tomcat、應用都被打包在了一起,運行在Docker容器里,容器和容器間是隔離的。
這里提示:Linux支持Docker,Windows和MacOS的話,不直接支持(win10專業版好像可以直接支持,不過我都是安裝Linux的虛擬機,在上面跑Docker)。
Docker和虛擬機的區別從兩者的架構圖上看,虛擬機是在硬件級別進行虛擬化,模擬硬件搭建操作系統;而Docker是在操作系統的層面虛擬化,復用操作系統,運行Docker容器。
Docker的速度很快,秒級,而虛擬機的速度通常要按分鐘計算。
Docker所用的資源更少,性能更高。同樣一個物理機器,Docker運行的鏡像數量遠多于虛擬機的數量。
虛擬機實現了操作系統之間的隔離,Docker算是進程之間的隔離,虛擬機隔離級別更高、安全性方面也更強。
虛擬機和Docker各有優勢,不存在誰替代掉誰的問題,很多企業都采用物理機上做虛擬機,虛擬機中跑Docker的方式。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。