一.為什么會有Docker出現
一款產品從開發到上線,從操作系統,到運行環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多互聯網公司都不得不面對的問題,特別是各種版本的迭代之后,不同版本環境的兼容,對運維人員都是考驗 .Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案。
環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地復制過來。
開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。開發需要清楚的告訴運維部署團隊,用的全部配置文件+所有軟件環境不過,即便如此,仍然常常發生部署失敗的狀況。
Docker鏡像的設計,使得Docker得以打破過去"程序即應用" 的觀念。透過鏡像(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,directadmin安裝,達到應用程式跨平臺間的無縫接軌運作。在這里插入圖片描述。
二.什么是Docker
Docker是基于Go語言實現的云開源項目。Docker的主要目標是“Build,Ship and Run Any APP,Anywhere”,也就是通過對應組件的封裝、分發、部署、運行等生命周期的管理,是用戶的App及其運行環境能夠做到“一次封裝,到處運行”。
Linux容器技術的出現就解決了這樣一個問題,而Docker就是在它的基礎上發展過來的。將應用運行的Docker容器上面,而Docker容器在任何操作系統上都是一致的,免備案服務器,這就實現了跨平臺、跨服務器。只需要一次配置好環境,換到別的機器上就可以一鍵部署好,大大簡化了操作,Docker解決了運行環境和配置軟件容器,方便做持續集成并有助于整體發布的容器虛擬化技術。
三.虛擬機技術與容器虛擬化技術
虛擬機就是帶環境安裝的一種解決方案。 它可以在一種操作系統里面運行另一種操作系統,比如在windows系統里運行Linux系統。應用程序對此毫無感知,因為虛擬機看上去就跟真實的系統一樣,能夠使應用程序,操作系統和硬件三者之間邏輯不變
虛擬機的缺點:
資源占用多
冗余步驟多
啟動慢
由于虛擬機存在這些缺點,Linux發展出了另一種虛擬化技術:Linux容器(LinuxContainers,縮寫為LXC)。
Linux容器不是模擬一個完整的操作系統,而是對進程進程進行隔離。有了容器就可以將軟件運行所需的所有資源打包到一個隔離的容器中。容器與虛擬機不同,不需要捆包一整套操作系統,只需要軟件工程所需的庫資源和設置。系統因此而變得高效輕量并保證部署在任何環境中的軟件都能始終如一的工作。
比較Docker和傳統虛擬機方式的不同之處:
傳統虛擬機技術是虛擬機出一套硬件后,在其上運行一個完整操作系統,在該系統上在運行所需應用進程;
而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。每個容器之間相互隔離,每個容器有自己的文件系統,容器之間進程不會互相影響,能區分計算字資源。
四.Docker的基本組成
Docker鏡像(image)就是一個只讀的模板。鏡像可以用來創建Docker容器,一個鏡像可以創建很多容器。
Docker容器(Container)獨立運行的一個或一組應用。容器就是鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個建議的Linux環境和運行在其中的應用程序。容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上層那一層是可讀可寫的。
Docker倉庫(Repository)是集中存放鏡像文件的場所。倉庫和倉庫注冊服務器是有區別的。倉庫注冊服務器上往往存放著很多個倉庫,每一個倉庫又包含了多個鏡像,每個鏡像有不同的的標簽(tag)。倉庫分為公開倉庫和私有倉庫兩種形式。最大的公開倉庫是DockerHub