1、配置簡化
這是 Docker 的主要使用場景。将應用的所有配置工作寫入 Dockerfile 中,建立好鏡像, 以後就可以無限次使用這個鏡像進行應用部署了。這大大簡化了應用的部署,不需要為每次 部署都進行繁瑣的配置工作,實作了一次打包,多次部署。這大大加快了應用的開發效率, 使得程式員可以快速搭建起開發測試環境,不用關注繁瑣的配置工作,而是将所有精力都盡 可能用到開發工作中去。
2、代碼流水線管理 代碼從開發環境到測試環境再到生産環境,需要經過很多次中間環節,Docker 給應用
提供了一個從開發到上線均一緻的環境,開發測試人員均隻需關注應用的代碼,使得代碼的 流水線變得非常簡單,這樣應用才能持續內建和釋出。
3、快速部署
在虛拟機之前,引入新的硬體資源需要消耗幾天的時間。Docker 的虛拟化技術将這個 時間降到了幾分鐘,Docker 隻是建立一個容器程序而無需啟動作業系統,這個過程隻需要 秒級的時間。
4、應用隔離
資源隔離對于提供共享 hosting 服務的公司是個強需求。 如果使用 VM,雖然隔離性非 常徹底,但部署密度相對較低,會造成成本增加。
Docker 容器充分利用 linux 核心的 namespace 提供資源隔離功能。結合 cgroups,可以友善 的設定每個容器的資源配額。既能滿足資源隔離的需求,又能友善的為不同級别的使用者設定 不同級别的配額限制。
5、伺服器資源整合
正如通過 VM 來整合多個應用,Docker 隔離應用的能力使得 Docker 同樣可以整合服務 器資源。由于沒有額外的作業系統的記憶體占用,以及能在多個執行個體之間共享沒有使用的記憶體, Docker 可以比 VM 提供更好的伺服器整合解決方案。
通常資料中心的資源使用率隻有 30%,通過使用 Docker 并進行有效的資源配置設定可以提高資 源的使用率。
6、多版本混合部署 随着産品的不斷更新換代,一台伺服器上部署多個應用或者同一個應用的多個版本在企
業内部非常常見。但一台伺服器上部署同一個軟體的多個版本,檔案路徑、端口等資源往往 會發生沖突,造成多個版本無法共存的問題。
如果用 docker,這個問題将非常簡單。由于每個容器都有自己獨立的檔案系統,是以根本不 存在檔案路徑沖突的問題; 對于端口沖突問題,隻需要在啟動容器時指定不同的端口映射即 可解決問題。
7、版本更新復原 一次更新,往往不僅僅是應用軟體本身的更新,通過還會包含依賴項的更新。 但新舊
軟體的依賴項很可能是不同的,甚至是有沖突的,是以在傳統的環境下做復原一般比較困難。 如果使用 docker,我們隻需要每次應用軟體更新時制作一個新的 docker 鏡像,更新時先停 掉舊的容器, 然後把新的容器啟動。 需要復原時,把新的容器停掉,舊的啟動即可完成回 滾,整個過程各在秒級完成,非常友善。
8、内部開發環境 在容器技術出現之前,公司往往是通過為每個開發人員提供一台或者多台虛拟機來充當
開發測試環境。開發測試環境一般負載較低,大量的系統資源都被浪費在虛拟機本身的程序 上了。
Docker 容器沒有任何 CPU 和記憶體上的額外開銷,很适合用來提供公司内部的開發測試環境。 而且由于 Docker 鏡像可以很友善的在公司内部共享,這對開發環境的規範性也有極大的幫 助。
9、PaaS
使用 Docker 搭建大規模叢集,提供 PaaS。這一應用是最有前景的一個了,目前已有很 多創業公司在使用 Docker 做 PaaS 了,例如雲雀雲平台。使用者隻需送出代碼,所有運維工作 均由服務公司來做。而且對使用者來說,整個應用部署上線是一鍵式的,非常友善。
10、雲桌面
方案所提供的虛拟桌面相比于傳統的基于硬體虛拟化的桌面方案更輕量級,運作速率大大提升。不過該方案仍處于實驗階段,不知是否可行。可以參考一下 Docker-desktop 方案。