docker能用來做的事情有:1、可以快速搭建開發環境;2、可以將運行環境和配置放在程式碼中並部署;3、可以使用docker-compose來模擬生產環境; 4、進行自動測試;5、使用docker映像進行自我部署等等。
本文操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。
docker能用來幹嘛的?
Docker 是一個開源的應用程式容器引擎,讓開發者可以打包他們的應用程式以及依賴套件到一個可移植的映像中,然後發佈到任何流行的 Linux或Windows作業系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,彼此之間不會有任何介面。
為什麼要用Docker?
作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。
首先,Docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機器方式要快得多。其次,Docker 對系統資源的使用率很高,一台主機上可以同時運行數千個 Docker 容器。
容器除了運作其中應用程式外,基本上不消耗額外的系統資源,使得應用的效能很高,同時系統的開銷盡量小。傳統虛擬機方式運行 10 個不同的應用程式就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用機。
具體說來,Docker 在下列幾個方面具有較大的優勢。
更快速的交付和部署
對開發和維運(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運作。
開發者可以使用一個標準的映像來建構一套開發容器,開發完成之後,維運人員可以直接使用這個容器來部署程式碼。 Docker 可以快速建立容器,快速迭代應用程序,並讓整個流程全程可見,使團隊中的其他成員更容易理解應用程式是如何建立和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節省開發、測試、部署的時間。
更有效率的虛擬化
Docker 容器的運作不需要額外的hypervisor 支持,它是核心級的虛擬化,因此可以實現更高的性能和效率。
更輕鬆的遷移和擴展
Docker 容器幾乎可以在任意的平台上運行,包括實體機器、虛擬機器、公有雲、私有雲、個人電腦、伺服器等。這種相容性可以讓使用者把一個應用程式從一個平台直接遷移到另外一個。
更簡單的管理
使用 Docker,只需要小小的修改,就可以取代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且有效率的管理。
Docker 的九個常用應用程式場景
1. 本地依賴(Local Dependency)
你需要在本機系統快速嘗試Magento,或是為一個專案使用MySQL?還是希望嘗試大部分開源專案?那就使用 Docker 吧,它將幫助你節省大量時間。 Docker 能提升開發者的開發效率,讓我們快速建置開發環境。
開發環境的機器通常內存比較小,此前使用虛擬的時候,經常需要為開發環境的機器加內存,而通過 Docker 可以輕易的讓幾十個服務在 Docker 中跑起來。
2. 建造環境(Build Environment)
如果你希望建立原始碼,但發現沒有準備好合適的環境。那麼使用 Docker 是一個值得考慮的方案。畢竟如果使用傳統的方法一個接一個地安裝軟體,一大堆軟體安裝下來確實十分費時,使用容器技術省時省力,何樂而不為?
它能讓你將運行環境和配置放在程式碼中然後部署,同一個 Docker 的配置可以在不同的環境中使用,這樣就降低了硬體需求和應用環境之間耦合度。這裡有一個值得一看的例子: docker golang builder。
3. 微服務(Microservices)
你在使用微服務嗎?微服務架構 —— 將一個整體式的應用程式拆分成鬆散耦合的單一服務。
那不妨考慮 Docker,你可以將每個服務打包為一個 docker 映像並使用 docker-compose 來模擬生產環境(checkout docker networks)。最開始實踐的時候可能會比較費時費力,但長遠來看,最終將產生巨大的生產力。
4. 自動測試(Automated testing)
試想這樣一個問題,如何編寫自動化的整合測試案例,這些測試用例無需花很長時間來開始運行,用戶也可輕鬆管理。
這裡不是指在 Docker 中執行測試用例,而是將測試用例與映像緊密運行在一起。當你針對一個 docker 映像編寫測試案例時會有一個很大的優勢。以下簡單介紹一下我的測試流程:執行兩個 docker 映像(app db),在 MySQL 啟動時載入數據,並在 app docker 上使用 API。
5. 部署過程(Deployment process)
你可以使用 docker 映像進行自我部署。許多主流的主機提供者都支援託管 docker,如果你擁有一個具有 shell 存取權限的專用節點/vm,那麼事情將變得更容易。只需要設定好 docker,並在你想要的連接埠上執行你的映像即可。
6. 持續部署(Continuous Deployment)
都說Docker 天生適合持續整合/持續部署,在部署中使用Docker,持續部署將變得非常簡單,並會在進入新的鏡像後重新開始。
關於這個部分的自動化工作,現在已經有許多方案以供選擇,Kubernetes 就是一個耳熟能詳的名字。 Kubernetes是容器叢集管理系統,是一個開源的平台,可以實現容器叢集的自動化部署、自動擴縮容、維護等功能。
7. 多租用戶環境(Multi-tenancy)
Docker 有趣的一個使用場景是在多租用戶的應用程式中,它可以避免關鍵應用的重寫。如果你將應用程式服務公開給多個租戶(租戶指一組用戶,例如組織),使用單一租戶方案設計的應用程式如果用上了 sub-domain docker 可以快速獲得提供多租戶的服務。
關於這個場景的一個例子是為物聯網的應用開發一個快速、易用的多租戶環境。這種多租戶的基本程式碼非常複雜,很難處理,重新規劃這樣一個應用程式不但消耗時間,也浪費金錢。使用 Docker,可以為每個租用戶的應用層的多個實例建立隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於 Docker 環境的啟動速度和其高效的 diff 命令。
8. 來自一台機器的多個APP(Multiple apps from one machine)
這與上面提到的微服務有些聯繫,但即使你沒有使用微服務,只是提供服務,Docker 仍可以很好地管理單一機器上的所有服務。你應該使用資料夾掛載來為每個基於資料的 docker 映像保留資料。
9. 擴容 QPS(Scaling QPS)
Docker 透過建立另一個容器來幫助你輕鬆地進行水平擴展。如果遇到龐大的高峰流量,Docker 可以幫助你解決問題 —— 只需增加更多的機器並增加負載平衡器背後運行的容器數量。
還有文章沒提到的 Docker 的應用程式場景?歡迎你和大家一起分享~
本文最初發表在oschina,文章內容屬作者個人觀點,不代表本站立場。
推薦學習:《docker影片教學》
以上是docker能用來幹什麼的的詳細內容。更多資訊請關注PHP中文網其他相關文章!