Docker 是一個開源的容器引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者和系統管理員在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括 VMs(虛擬機)、bare metal、OpenStack 集羣、雲端、數據中心和其餘的基礎應用平臺。容器是徹底使用沙箱機制,相互之間不會有任何接口。本文將介紹 Docker 的九種用法,它們可提高你的生產力。git
你須要在本地系統快速嘗試 Magento,或者爲一個項目使用 MySQL?仍是但願嘗試大部分開源項目?那就使用 Docker 吧,它將幫你節省大量時間。Docker 能提高開發者的開發效率,讓咱們快速搭建開發環境。github
開發環境的機器一般內存比較小,此前使用虛擬的時候,常常須要爲開發環境的機器加內存,而經過 Docker 能夠輕易的讓幾十個服務在 Docker 中跑起來。golang
若是你但願構建源碼,但發現沒有準備好合適的環境。那麼使用 Docker 是一個值得考慮的方案。畢竟若是使用傳統的方法一個一個地安裝軟件,一大堆軟件安裝下來確實十分費時間,使用容器技術省時省力,何樂而不爲?docker
它能讓你將運行環境和配置放在代碼中而後部署,同一個 Docker 的配置能夠在不一樣的環境中使用,這樣就下降了硬件要求和應用環境之間耦合度。這裏有一個值得一看的例子: docker golang builder。shell
你在使用微服務嗎?微服務架構 —— 將一個總體式的應用拆分紅松耦合的單個服務。架構
那不妨考慮一下 Docker,你能夠將每一個服務打包爲一個 docker 鏡像並使用 docker-compose 來模擬生產環境(checkout docker networks)。最開始實踐的時候可能會比較費時費力,但長遠地來看,最終將產生巨大的生產力。app
試想這樣一個問題,如何編寫自動化的集成測試用例,這些測試用例無需花很長時間來開始運行,使用者也可輕鬆管理。負載均衡
這裏不是指在 Docker 中運行測試用例,而是將測試用例與鏡像緊密運行在一塊兒。當你針對一個 docker 鏡像編寫測試用例時會有一個很大的優點。下面簡單介紹一下個人測試流程:運行兩個 docker 鏡像(app + db),在 MySQL 啓動時加載數據,並在 app docker 上使用 API。可查看此腳本以獲取快速的示例。dom
你可使用 docker 鏡像進行自我部署。許多主流的主機提供商都支持託管 docker,若是你擁有一個具備 shell 訪問權限的專用節點/vm,那麼事情將變得更容易。只須要設置好 docker,並在你想要的端口上運行你的鏡像便可。ide
都說 Docker 天生適合持續集成/持續部署,在部署中使用 Docker,持續部署將變得很是簡單,並會在進入新的鏡像後從新開始。
關於這個部分的自動化工做,如今已經有許多方案以供選擇,Kubernetes 就是一個耳熟能詳的名字。Kubernetes是容器集羣管理系統,是一個開源的平臺,能夠實現容器集羣的自動化部署、自動擴縮容、維護等功能。
Docker 有意思的一個使用場景是在多租戶的應用中,它能夠避免關鍵應用的重寫。若是你將應用程序服務公開給多個租戶(租戶指一組用戶,例如組織),使用單租戶方案設計的應用程序若是用上了 sub-domain + docker 能夠快速得到提供多租戶的服務。
關於這個場景的一個例子是爲物聯網的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼很是複雜,很難處理,從新規劃這樣一個應用不但消耗時間,也浪費金錢。使用 Docker,能夠爲每個租戶的應用層的多個實例建立隔離的環境,這不只簡單並且成本低廉,固然這一切得益於 Docker 環境的啓動速度和其高效的 diff 命令。
這與上面提到的微服務有些聯繫,但即便你沒有使用微服務,只是提供服務,Docker 仍能夠很好地管理單個機器上的全部服務。你應該使用文件夾掛載來爲每一個基於數據的 docker 鏡像保留數據。
Docker 經過建立另外一個容器來幫助你輕鬆地進行水平擴展。若是遇到巨大的高峯流量,Docker 能夠幫助你解決問題 —— 只需添加更多的機器並增長負載均衡器背後運行的容器數量。
還有文章沒提到的關於 Docker 的應用場景?歡迎你和你們一塊兒分享~
參考:https://medium.com/@012parth/docker-for-10-things-adaca4cca7f8