Docker能解決什麼問題呢?
一個工具的出現必然須要解決一些問題,Docker也不例外,簡單說說咱們常見的2種狀況Docker是如何解決的吧。
一、程序在我這跑得好好的,在你那怎麼就不行呢?!
這是一個典型的應用場景,做爲程序員別說沒有遇到過這個問題。Docker image(鏡像)中不只包含了代碼,也包含了程序運行時所需的全部依賴。好比java的程序,確定要在image中包含jdk;好比Python的程序,確定要在image中包含對應版本的Python解釋器。程序在我這跑得好好的,去你那就不行了,這顯然是環境問題,Docker把整個運行時環境打包放到image中,因此搞定了環境依賴問題!
這點很重要麼?真的很重要!咱們知道,一個程序要跑起來,須要這麼幾部分:代碼 + 運行環境 + 配置 + 依賴的服務。代碼固然就是同一份代碼,不一樣的環境都同樣,一般不會有問題。可是問題的關鍵就在於環境和配置,不一樣的環境、不一樣的配置,一樣的代碼就不必定能循序漸進的跑起來了。Docker image中包含了運行環境+配置,既可以確保環境和配置的統一,也可以方便快速的部署。
因此總結起來就是:Docker解決了運行環境和配置問題,方便發佈,也就方便作持續集成。
二、系統好卡,確定是又有哪一個哥們的程序在做孽了
如今的服務器都牛的很,動不動128G內存,24個CPU,Linux自己就是個多租戶的操做系統,能夠多人共用,可是若是某個程序狂吃內存和CPU,佔用了太多系統資源,這就會影響其餘程序的運行。
一個公司的幾個同事共用一臺機器出現這種問題能夠經過內部協調溝通解決。可是雲主機提供商呢?不一樣的用戶之間不認識,共用一臺強大的計算機,結果某個程序耗盡了資源,用戶確定不樂意了。因此虛擬機出現了,良好了作了資源隔離,不一樣用戶之間彼此老死不相往來,不會相互影響,世界一會兒清靜了。可是,虛擬機有缺點:建立速度慢,遷移起來麻煩,由於中間加了一層guest os,有了性能損耗,一個牛逼的機器也就建立十幾個虛擬機,太浪費了...
相對虛擬機的重量級虛擬化方案,Linux內核級的一些隔離方案讓人們看到了但願,cgroups、namespace、tc、quota、chroot、lxc。終於,Docker出現了,Docker利用這些成熟的技術,讓虛擬化變得輕量了起來,建立一個container瞬間完成,秒級!cpu指令集再也不被翻譯執行,性能損耗很是少,雖然說隔離性沒有虛擬機那麼完全,安全性上稍差一些,但也基本能夠用,不用太擔憂~
因此總結起來就是:更輕量的虛擬化,節省了虛擬機的性能損耗。java