Docker 解決了運行環境和配置問題軟件容器,是方便作持續集成並有助於總體發佈的容器虛擬化技術。java
一款產品從開發到上線,從操做系統,到運行環境,再到應用配置。做爲開發+運維之間的協做咱們須要關心不少東西,這也是不少互聯網公司都不得不面對的問題,特別是各類版本的迭代以後,不一樣版本環境的兼容,對運維人員都是考驗。Docker之因此發展如此迅速,也是由於它對此給出了一個標準化的解決方案。docker
環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。不少人想到,能不能從根本上解決問題,軟件能夠帶環境安裝?也就是說,安裝的時候,把原始環境如出一轍地複製過來。開發人員利用 Docker 能夠消除協做編碼時「在個人機器上可正常工做」的問題。數據庫
以前在服務器配置一個應用的運行環境,要安裝各類軟件,就拿尚硅谷電商項目的環境來講吧,Java/Tomcat/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如咱們是在 Windows 上安裝的這些環境,到了 Linux 又得從新裝。何況就算不跨操做系統,換另外一臺一樣操做系統的服務器,要移植應用也是很是麻煩的。服務器
傳統上認爲,軟件編碼開發/測試結束後,所產出的成果便是程序或是可以編譯執行的二進制字節碼等(java爲例)。而爲了讓這些程序能夠順利執行,開發團隊也得準備完整的部署文件,讓維運團隊得以部署應用程式,開發須要清楚的告訴運維部署團隊,用的所有配置文件+全部軟件環境。不過,即使如此,仍然經常發生部署失敗的情況。Docker鏡像的設計,使得Docker得以打破過去「程序即應用」的觀念。透過鏡像(images)將做業系統核心除外,運做應用程式所須要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運做。運維
Docker是基於Go語言實現的雲開源項目。測試
Docker的主要目標是「Build,Ship and Run Any App,Anywhere」,也就是經過對應用組件的封裝、分發、部署、運行等生命週期的管理,使用戶的APP(能夠是一個WEB應用或數據庫應用等等)及其運行環境可以作到「一次封裝,處處運行」。網站
Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用運行在 Docker 容器上面,而 Docker 容器在任何操做系統上都是一致的,這就實現了跨平臺、跨服務器。只須要一次配置好環境,換到別的機子上就能夠一鍵部署好,大大簡化了操做。ui
虛擬機(virtual machine)就是帶環境安裝的一種解決方案。編碼
它能夠在一種操做系統裏面運行另外一種操做系統,好比在Windows 系統裏面運行Linux 系統。應用程序對此毫無感知,由於虛擬機看上去跟真實系統如出一轍,而對於底層系統來講,虛擬機就是一個普通文件,不須要了就刪掉,對其餘部分毫無影響。這類虛擬機完美的運行了另外一套系統,可以使應用程序,操做系統和硬件三者之間的邏輯不變。spa
虛擬機的缺點:
因爲前面虛擬機存在這些缺點,Linux 發展出了另外一種虛擬化技術:Linux 容器(Linux Containers,縮寫爲 LXC)。
Linux 容器不是模擬一個完整的操做系統,而是對進程進行隔離。有了容器,就能夠將軟件運行所需的全部資源打包到一個隔離的容器中。容器與虛擬機不一樣,不須要捆綁一整套操做系統,只須要軟件工做所需的庫資源和設置。系統所以而變得高效輕量並保證部署在任何環境中的軟件都能始終如一地運行。
比較Docker 和傳統虛擬化方式的不一樣之處:
一次構建、隨處運行