Docker是Linux系統下一種優秀的封裝技術,從軟體研發到發布,相比物理機、虛擬化都有非常大的優勢。那軟體研發為什麼那麼喜歡Docker呢?
軟體研發的挑戰
為什麼要講軟體研發挑戰呢?因為docker在軟體研發上市最具優勢的。
一個計算機軟體從客戶的需求到程式設計師手下的代碼到可運行版本的誕生,會經歷需求調研、架構設計、程序編碼、各種測試。在這過程中,程式設計師會碰到幾個主要的挑戰:
①、用什麼作業系統(windows、linux、unix)?來源於客戶需求;
②、用什麼開發(J2EE,dot NET等)?來源於架構設計;
③、開發方法(瀑布型、快速迭代等)?來源於開發團隊;
④、頻繁測試(需要頻繁部署測試環境:含系統、開發所需環境,比如java;);
從上面挑戰可以看出: 軟體研發跟軟體代碼不相關,又不得不做的是開發環境的部署,而且這裡一直都需要用到它,一直持續到軟體正式上線。
而docker非常適合這個需求,它利用linux的namespce技術將 代碼運行需要的開發環境、網絡、進程、數據存儲打包在一起。和其他的docker或者系統進程完全隔離,互相之間不受影響,非常優越性。下面我們就來看看它的優越性:
docker的優越性
前面我們已經簡要說了下docker的技術和優越性。這裡詳細展開講解一下:
1、持續一致性
這個是docker的核心優勢,它打包了開發所需要的開發環境,而且這個開發環境一直保持不變。這個持續一致性,對於軟體研發來說是非常重要的。
因為軟體研發編寫的代碼需要很多依賴的包和庫文件。而且版本不同也存在很多差別。所以,docker保持了這個一致性,減少了研發人員很多麻煩,大大提高效率。
2、性能卓越
docker 將開發環境、網絡、進程、數據存儲等系統運行需要的資源的都打包在一起。具備了和虛擬機一樣的特性。但相比虛擬機它不存在虛擬層、也不存在虛擬硬體。執行效率方面,docker打包的進程可以直接調用cpu來執行,所以docker的性能相比虛擬機快很多。
3、很好的隔離性
前面說到docker打包了開發需要的資源形成一個容器。這個容器內部和外部天生具有很好的隔離性。容器內的進程和容器外的進程是不會互相關聯通信的,而且它佔有的計算資源cpu+內存+存儲都是可以限定,不會互相競爭而導致物理主機崩潰。但相比虛擬化的隔離性還是差了一點點(因為不同容器還在同一系統下運行)。但不影響使用。
4、高安全性
高安全性也得益於它的隔離性。因為無論容器內的進程也好、數據也好都是獨立的。外部無法獲得。容器之間需要網絡通訊,必須使用docker hub。而docker hub是類似於交換機的網絡堆棧,是可以配置互相訪問的埠。確保交換的安全。
5、高兼容性
docker 因為它是一個打包封裝的容器,原本運行與linux系統內。如今雲計算快速發展。docker 對雲計算計算兼容性很高。
雲計算的巨頭「亞馬遜」、「微軟」都是支持和兼容docker的;虛擬化的領頭羊「vmware」也是支持兼容docker的;開源的Openstack也是支持和兼容docker的;國內的華為、阿里、騰訊雲都是支持兼容的;如此高的兼容性,為研發人員獲取docker提供了很高的便利性。
結束語
綜上所述,Docker 是在軟體研發到發布具有很高優越性。同時它具備的這些特性也符合應用運行需要的基本特性。甚至被人認為是革命性技術。
其實它也有很多不足之處,比如:隔離性、安全性就比虛擬機差。