- 1.在軟件開(kāi)發(fā)中,最麻煩的事情之一就是環(huán)境配置。在正常情況下,如果要保證程序能運行,我們需要設置好操作系統,以及各種庫和組件的安裝。
- 2.舉例來(lái)說(shuō),要運行一個(gè)Python程序,計算機必須要有 Python 引擎,還需要安裝好程序的各種依賴(lài),甚至還要配置特定的環(huán)境變量。假設你有兩個(gè)程序都需要部署在同一個(gè)服務(wù)器上,一個(gè)需要軟件是基于Python2.0,一個(gè)是Python3.0,那么在部署上就很容易造成混亂。因為不同版本的Python模塊可能互不兼容,況且不同開(kāi)發(fā)環(huán)境上的庫也需要額外的配置。如果要部署很多程序,而開(kāi)發(fā)環(huán)境和部署環(huán)境各不相同的話(huà),可想而知配置得多么麻煩。
- 3.為了更好地將軟件從一個(gè)環(huán)境移植到另一個(gè)環(huán)境上,必須從根源上解決問(wèn)題,那么如何在移植軟件的時(shí)候,將一模一樣的原始環(huán)境遷移過(guò)來(lái)呢?
虛擬機是移植環(huán)境的一種解決方案。虛擬機本質(zhì)上也是一個(gè)軟件,在這個(gè)軟件中,我們可以運行另一種操作系統。比如我們想要在 MacOS 上運行 Linux 系統,我們就在電腦上安裝 Linux 鏡像,并使用虛擬機打開(kāi)此鏡像,就能創(chuàng )建出一個(gè)鏡中鏡了。這個(gè)方案非常方便,想要新環(huán)境,就安裝鏡像,然后使用虛擬機打開(kāi),不想要直接刪除。但是這個(gè)方案有幾個(gè)缺點(diǎn):
為了解決虛擬機存在的這些缺點(diǎn),Linux發(fā)展出了另一種虛擬化的技術(shù):Linux容器。Linux 容器不是模擬一個(gè)完整的操作系統,而是對進(jìn)程進(jìn)行隔離?;蛘哒f(shuō),就是在正常進(jìn)程的外面套用了一個(gè)保護層。對于容器里面的進(jìn)程來(lái)說(shuō),它接觸到的各種資源都是虛擬的,從而實(shí)現與底層程序的隔離。由于容器是進(jìn)程級別的,相比虛擬機有更多優(yōu)勢:

- Docker屬于Linux容器的一種封裝,提供簡(jiǎn)單易用的容器使用接口,它也是目前最流行的Linux容器解決方案。Docker 將軟件代碼和其依賴(lài),全打包在一個(gè)文件中。運行單個(gè)文件,就會(huì )生成虛擬容器。在這個(gè)虛擬容器中,不管本地的操作系統是如何的不同,此容器都能照常運行。
- 簡(jiǎn)而言之,Docker的接口非常簡(jiǎn)單,可以幫助用戶(hù)更好地創(chuàng )建和使用容器,讓相同的代碼在不同的環(huán)境上正常運行。
Docker容器和傳統VM技術(shù),在技術(shù)實(shí)現上有所不同。下圖顯示的是VM與Docker容器的邏輯組成:


- Server:相當于云服務(wù)器
- Host OS:為操作系統
- Docker Engine:可以認為我們在這個(gè)操作系統上安裝了一個(gè)docker的軟件
- App A:在Docker組件中運行App A
- App B:在Docker組件中運行App B
- # 所以docker完全沒(méi)有操作系統的概念,用的還是宿主機的操作系統,但是它做出了隔離。也實(shí)現了虛擬化。
虛擬機與Docker容器對比

Docker容器的運行邏輯如下圖所示,Docker使用客戶(hù)端/服務(wù)器 (C/S) 架構模式,Docker守護進(jìn)程(Docker daemon)作為Server端接收Docker客戶(hù)端的請求,并負責創(chuàng )建、運行和分發(fā)Docker容器。Docker守護進(jìn)程一般在Docker主機后臺運行,用戶(hù)使用Docker客戶(hù)端直接跟Docker守護進(jìn)程進(jìn)行信息交互。

聯(lián)系客服