先說Docker幹啥用的。因為現在物理伺服器是很強大的,我們如果在一臺物理伺服器上只跑一個服務就浪費了,而同時跑很多服務他們又互相影響,比如說一個服務出了記憶體洩漏把整個伺服器的記憶體都佔滿了,其他服務都跟著倒黴。所以要把每個服務都隔離起來,讓它們只使用自己那部分有限的cpu,記憶體和磁碟,以及自己依賴的軟體包。這個早先是用虛擬機器來實現隔離的,但是每個虛擬機器都要裝自己的作業系統核心,這是對資源有點浪費。於是就有了Docker, 一個機器上可以裝十幾個到幾十個docker,他們共享作業系統核心,佔用資源少,啟動速度快。但又能提供了資源(cpu, 記憶體,磁碟等)的一定程度的隔離。
然後使用docker給軟體開發又帶來了不少額外的好處。比如說運維省心啊,所有物理伺服器的配置幾乎都是一樣的,只是上面跑的docker container不同。以前某個服務訪問量大了,需要多幾臺伺服器,你得一臺一臺準備,現在直接docker配好,要幾個就給幾個。
還有依賴關係管理也容易了,每個docker image都可以獨立配置自己需要的軟體包,準備一個配置檔案就可以釋出,不像以前配置個apache + php就在一臺物理主機上從頭編譯到尾,如果想再多個外掛,往往是從頭又來一遍,機器多了是受不了的。而且依賴有衝突也沒那麼怕了,都隔離了嘛。
現在docker的隔離性已經做的非常好了。我覺得docker有個問題是linux宿主和windows宿主的docker實現差異還挺大的。linux是基於linux核心的namespaces和cgroup等來隔離資源,還有libvirt這樣的介面實現,基本上能當個虛擬機器來用,又很輕量級。windows方面主要是靠微軟,微軟做得也還不錯,前後搞了好幾種container方案,前段時候我試過的是基於hyper-v的, 功能應該都在了,所以說現在docker在windows主機上也是能用的, 這對國內龐大的windows伺服器保有量也是個福音。不過在windows上面使用docker開發是沒問題,生產環境我就不確定了。
先說Docker幹啥用的。因為現在物理伺服器是很強大的,我們如果在一臺物理伺服器上只跑一個服務就浪費了,而同時跑很多服務他們又互相影響,比如說一個服務出了記憶體洩漏把整個伺服器的記憶體都佔滿了,其他服務都跟著倒黴。所以要把每個服務都隔離起來,讓它們只使用自己那部分有限的cpu,記憶體和磁碟,以及自己依賴的軟體包。這個早先是用虛擬機器來實現隔離的,但是每個虛擬機器都要裝自己的作業系統核心,這是對資源有點浪費。於是就有了Docker, 一個機器上可以裝十幾個到幾十個docker,他們共享作業系統核心,佔用資源少,啟動速度快。但又能提供了資源(cpu, 記憶體,磁碟等)的一定程度的隔離。
然後使用docker給軟體開發又帶來了不少額外的好處。比如說運維省心啊,所有物理伺服器的配置幾乎都是一樣的,只是上面跑的docker container不同。以前某個服務訪問量大了,需要多幾臺伺服器,你得一臺一臺準備,現在直接docker配好,要幾個就給幾個。
還有依賴關係管理也容易了,每個docker image都可以獨立配置自己需要的軟體包,準備一個配置檔案就可以釋出,不像以前配置個apache + php就在一臺物理主機上從頭編譯到尾,如果想再多個外掛,往往是從頭又來一遍,機器多了是受不了的。而且依賴有衝突也沒那麼怕了,都隔離了嘛。
現在docker的隔離性已經做的非常好了。我覺得docker有個問題是linux宿主和windows宿主的docker實現差異還挺大的。linux是基於linux核心的namespaces和cgroup等來隔離資源,還有libvirt這樣的介面實現,基本上能當個虛擬機器來用,又很輕量級。windows方面主要是靠微軟,微軟做得也還不錯,前後搞了好幾種container方案,前段時候我試過的是基於hyper-v的, 功能應該都在了,所以說現在docker在windows主機上也是能用的, 這對國內龐大的windows伺服器保有量也是個福音。不過在windows上面使用docker開發是沒問題,生產環境我就不確定了。