首頁>Club>

13
回覆列表
  • 1 # 師傅有妖怪

    專案為什麼用docker?

    我們來看看使用docker有什麼好處:

    環境隔離

    我在沒有用docker之前部署伺服器環境的時候,部署一個服務可能會需要安裝一些依賴的程式,比如用到ImageMagick進行圖片處理,這樣的服務和依賴多了以後,如果突然有一個服務我不再用了,它使用到的依賴程式我沒辦法確定能不能刪除了,因為很可能其它服務也用到了這個依賴。

    還有如果兩個服務需要用到同一個程式的不同版本,這個時候沒有docker的話要安裝也會很麻煩。

    環境統一

    以前做負載均衡部署服務到不同的伺服器,有時候會碰到因為某些莫名其妙的原因,在有的伺服器上執行就是會出bug。

    使用docker服務需要的依賴都在映象中設定好,使用的都是統一的版本,這樣就不會出現這些問題。同時,開發,測試,釋出的環境都可以統一,減少了因為環境不同導致的bug。

    部署方便

    使用docker可以把需要用到的依賴都安裝打包成映象,寫好部署指令碼,部署的時候執行指令碼安裝,簡單方便,不需要在每一個伺服器去下載、編譯、安裝各種依賴。

    這在服務體量很大,需要很多伺服器做負載均衡的時候特別方便,尤其是配合Kubernetes。

    DevOps

    使用docker配合其它工具搭建DevOps環境,持續開發、測試、部署,可以減少中間環節,提高企業效率。

    以上就是使用docker帶來的好處,當然docker也不是唯一的解決方案,但它是現在的主流方案。

    希望可以幫到你~

  • 2 # 百木森森

    環境隔離優勢:Docker可以很好的將應用所依賴的環境封裝在一起,多個容器間環境互不影響。試想在同一個伺服器中部署的多個應用都要對同一個環境變數進行修改,或依賴同一種但版本不相容的庫。此時就會感受到環境隔離帶來的好處,每個應用都有自己獨享的環境變數和依賴庫,完全不受同伺服器的其他應用影響。環境想怎麼改就怎麼改,絲毫不用擔心改變了自己的環境後其他同事受到影響。

    一次打包隨處使用:如果工作中需要把公司的產品交付給甲方,就能明顯感受到Docker帶來的好處。有時己方系統複雜度較高,在客戶伺服器上部署需要經過非常多的操作,流程又長錯誤率又高。如果這些環境在己方公司通過Docker預先打包好,到客戶公司只是啟動若干容器就完事了,那得省去多少麻煩。再試想在自己公司的環境裡除錯的好好的程式碼,在客戶準備的伺服器上部署後卻出現了各種莫名其妙的問題,經過各種令人崩潰的排查過後發現是客戶伺服器的環境變數、依賴庫版本不相容等造成的問題,到底會有多想罵娘?

    新手易上手性:在新手接觸一些開源專案時,總容易遇到一個問題,那就是當想搭建一個該開源框架的demo系統時,會遇到各種新手無法解決的問題。因此造成新手遲遲無法成功運營系統,嚴重影響了學習新技術的腳步,甚至有些新手會直接放棄該技術的學習。此時如果該開源框架有提前封裝好的Docker映象,那新手很容易開箱即用,跳過繁瑣的環境搭建階段,那對於上手新技術將是非常友好的體驗。

    資源隔離優勢:對於硬體資源緊張的公司,同一臺伺服器上同時部署多個不同應用是非常常見的事,但有時其中有些應用存在記憶體洩漏之類的缺陷,導致某個應用會把整個伺服器的資源全部吃掉,最終影響了同一臺伺服器上其他無辜應用的執行。通過Docker來進行資源隔離是一個很好的實踐,可以有效限制應用消耗資源的上限,保證了同一臺伺服器上其他應用的穩定執行。

  • 3 # 枝枝葉葉

    比如 要編譯 openwrt 的一個版本,對編譯器的 版本,git 版本等等類似的工具有要求,單獨裝一個虛擬機器 費事,也可以下載裝好的虛擬機器。 更省資源的辦法是 下載 裝好的docker. 這在 網際網路應用部署中,可以消除很多重複勞動

  • 4 # DeepLearning

    docker可以認為是輕量級的虛擬機器,輕量到一個獨立環境像一個程序!答案就是,你為什麼用虛擬機器,你就更有理由用docker。

  • 5 # 你看我獨角獸嗎

    什麼是Docker?

    自2012年釋出以來,Docker已成為devop和Web開發中增長最快的技術之一。但是,像任何新技術一樣,它仍在開發中,存在一些侷限性,並不適合每個專案。本指南概述了Docker的優缺點,以便您可以決定是否對您的專案有好處。

    有關Docker概念和術語的更基本介紹,請參閱《Docker簡介》指南。

    可重複性:類似於Java應用程式,它將在能夠執行Java虛擬機器的任何裝置上完全相同地執行,因此,保證Docker容器在可以執行Docker的任何系統上都是相同的。容器的確切規範儲存在Dockerfile中。

    通過在團隊成員之間分發此檔案,組織可以保證從同一Dockerfile構建的所有映像將具有相同的功能。此外,擁有一個恆定且有據可查的環境,可以更輕鬆地跟蹤您的應用程式並確定問題。

    隔離:容器內的依賴項或設定不會影響您的計算機或任何其他正在執行的容器上的安裝或配置。通過為應用程式的每個元件(例如,用於承載網站的Web伺服器,前端和資料庫)使用單獨的容器,可以避免相互衝突的依賴關係。您也可以在單個伺服器上有多個專案,而不必擔心在系統上造成衝突。

    安全性:在進行重要警告時(如下所述),將大型應用程式的不同元件劃分到不同的容器中可以帶來安全性好處:如果一個容器遭到破壞,其他容器則不受影響。

    Docker Hub:對於常見或簡單的用例,例如LAMP堆疊,儲存影象並將其推送到Docker Hub的能力意味著已經有許多維護良好的影象。能夠快速提取預製映像或從官方維護的Dockerfile構建,可以使這種設定過程極其快速和簡單。

    環境管理:Docker使使用nginx維護不同版本的網站變得容易,例如。您可以在同一個Linode上有一個單獨的容器來進行測試,開發和生產,並輕鬆地部署到每個容器上。

    持續整合:Docker作為Travis,Jenkins和Wercker等工具的持續整合管道的一部分,可以很好地工作。每次您的原始碼更新時,這些工具都可以將新版本儲存為Docker映像,用版本號標記它並推送到Docker Hub,然後將其部署到生產環境中。

    何時使用Docker

    如果您的應用程式符合以下一個或多個類別,則Docker可能是一個很好的選擇:

    學習新技術:為了在不花時間安裝和配置的情況下開始使用新工具,Docker提供了一個隔離的一次性環境。許多專案維護的Docker映像及其應用程式已經安裝和配置。例如,如果您想簽出Zipkin之類的分散式跟蹤系統,只需執行以下命令即可在localhost上進行有效的設定:

    sudo docker run -d -p 9411:9411 openzipkin/zipkin

    基本用例:如果您的應用程式足夠基本或標準,可以使用預設Docker映像,則從Docker Hub提取映像也是一個很好的解決方案。使用LAMP堆疊託管網站,使用反向代理或設定Minecraft伺服器等案例通常在DockerHub上具有官方或受良好支援的映像。如果這些映像中的預設配置可以滿足您的需要,那麼拉取映像可以節省大量時間,否則將花費大量時間來設定環境和安裝必要的工具。

    應用程式隔離:如果要在一臺伺服器上執行多個應用程式,請將每個應用程式的元件放在單獨的容器中將防止依賴性管理出現問題。

    開發人員團隊:如果您的開發人員使用不同的設定,則Docker提供了一種便捷的方法來擁有與生產環境緊密匹配的本地開發環境,而無需使用ssh放入遠端裝置。

    您應該使用Docker容器嗎?

    Docker已經成為使用容器配置,儲存和共享伺服器環境的一種非常流行的方式。因此,安裝應用程式甚至大型堆疊通常可以像執行docker pull或一樣簡單docker run。將應用程式功能分離到不同的容器中還提供了安全性和依賴性管理方面的優勢。

    但是,Docker不能替代系統工程或配置管理,並且它的方法也有缺點。開發人員應該抵制將其建立的每個應用程式進行容器化的誘惑,僅僅是因為Docker是一種流行且使用者友好的解決方案。與任何工具一樣,在決定是否使用Docker之前,應仔細研究任何專案的需求。

  • 6 # 星野科技君

    前幾天,公司一批伺服器就要到期了,由於伺服器是15年購買的,硬體的效能遠比現在新出的雲主機低,因此決定把所有伺服器都換成新一代伺服器,但是小編整準備動手遷移伺服器時,內心一陣陣崩潰感湧上心頭,仔細一算,每臺伺服器都要做同樣的事情:

    安裝jdk、Tomcat、nginx

    2. 配置jdk環境變數和系統變數

    3. 配置Tomcat

    4. 配置nginx

    5. 安裝專案所需的視訊解碼元件

    6. 匯入專案所需的一些特殊字型

    後來決定用docker部署的辦法,在每臺伺服器都把docker安裝之後,只需要在其中一臺伺服器中把Tomcat映象從映象倉庫拉取下來,把這些配置都設定好,做成一個自己的映象上傳到映象倉庫中,之後在其他幾臺伺服器都下載自己做的映象,運行於docker中,把程式碼上傳,就萬事大吉了。

  • 7 # 微捷Kevin

    Docker可以將複雜的應用程式執行環境部署打包,這樣就避免開發人員或者運維人員反覆部署相同的應用程式執行環境。在如今雲端計算盛行的情況下,分散式應用和管理變得簡單了。基本上雲端計算服務平臺都提供了現成的群集計算服務,這些群集服務無一例外都是基於docker映象構建的。群集應用的要求就是每個節點的應用程式版本以及環境要一致,一個docker映象就是一個虛擬主機,只要放到容器中即可實現單機獨立執行的效果,大大簡化了分散式群集應用的實現過程

  • 8 # 會點程式碼的大叔

    專案為什麼要用 docker,需要了解 docker 的優勢,結合專案的實際情況來決定是否需要使用 docker,千萬不能“為了使用而使用”或者“跟風使用 docker”。

    使用 docker 是為了快速交付

    和傳統的虛擬機器相比,docker 具有所用的資源更少、效能更高、隔離級別更高、安全性方面也更強等特點,讓我們看看下面幾個場景,估計你會有更深的體會。

    01. 移植性更強

    相信開發人員都會遇到這樣的問題:程式碼在本地跑的好好的,但是一發布到測試環境怎麼就有問題了呢?

    通常我們的的程式碼包需要依賴於環境中的很多因素,比如配置檔案、依賴庫、中介軟體的配置等等,其中一項有問題可能都會導致我們程式碼出現問題;對於開發人員來說,最希望的就是我們的程式碼能夠一次建立,在任意地方都能執行。

    而使用 docker 之後,可以實現開發、測試、運維環境的標準化,映象檔案直接做為交付物,避免了因為環境不同導致的各種問題。

    02. 更容易擴充套件

    docker 容器可以在任意平臺執行,不管是物理機還是虛擬機器,不管是公有云還是私有云,甚至是個人電腦,所以我們的專案容易做遷移和擴充套件。

    比如我們應用部署了兩臺機器,當我們想再擴充套件第三臺機器的時候,我們需要先搭建好程式碼執行所需的環境,儘管虛擬機器也有一些快速 copy 的技術,但是這個過程依然是很慢的,而且有些環境配置還容易出錯,而有了 docker,只需要構建映象然後執行即可,非常方便快速。

    因為 docker 快速的構建方式,也讓我們的專案可以實現自動且快速的擴容和縮容。

    03. 更加輕量

    在 docker 出現之前,通常會採用物理機上部署多臺虛擬機器,每個應用都部署在一個虛擬機器中;但是虛擬機器非常的重,虛擬機器的構建速度通常都是按照分鐘計算,佔用的資源比較多。

    而 docker 的速度很快,秒級,並且使用的資源更少,效能更高;同樣一個物理機器,docker 執行的映象數量遠多於虛擬機器的數量。

    使用 docker 只是快速交付的一部分

    docker 的優點這麼多,那是不是用了 docker 之後,我們的交付速度更快了呢?

    我見過一個專案,他們號稱已經微服務化了,當然他們確實也做到了:把一個專案拆成了數個服務,每個服務在生產環境上部署了多套,算下來就是 N * M 個應用包(七八十個),都做了容器化...

    但是他們依然是人肉運維,也是就是他們每次提測和上線需要手動部署,沒有自動化測試和釋出;

    生產環境發生問題的時候,需要手動去拿日誌跟蹤問題,開發和運維依然是兩個團隊,甚至是所屬兩個不同的部門,溝通的成本很高;

    他們雖然實現了容器化,但其實並沒有實現快速交付,甚至比傳統的方式更慢了。

    所以,不要為了 docker 而 docker;如果你們的專案環境配置複雜,每來一個新人配置環境都需要一兩天;每次提測和上線,經常問題都是執行環境的問題;開發人員的開發環境不統一;開發能力強,運維能力弱的時候,甚至公司比較窮,想實現資源使用的最大化,都可以考慮使用 docker,不過像要做微服務化+容器化,當容器叢集規模比較大的時候,還需要工具做容器的自動化管理和編排,自動化測試及部署等等。

  • 9 # 李老師tome

    我可以舉幾個例子,就可理解為什麼要用docker?

    隔離性

    用傳統的方式上線一個WEB專案,我們的一般做法是在線上伺服器中,安裝WEB伺服器,然後裝好資料庫,裝好其他需要的軟體最後把本地己打包好的程式碼上傳至伺服器,然後重啟就好了。

    如果一臺伺服器上要部署多個專案,每個專案之間無論是在資源的使用,還是之間的衝突。都會讓人崩潰。更別提有不同的開發語言和開發團隊。

    現在我們有docker ,可以用docker把應用直接打包封裝到一個容器中。容器之間有著程序之間的隔離,在容器中操作不會影響到其他容器的使用。

    可移植性

    以前開發一套應用,必須開發機上安裝環境,測試機上安裝環境,然後部署的伺服器上安裝環境,而且由於使用的機器不是同樣的作業系統,所以有時會出現在本機上沒問題,測試時有出問題,甚至開發測試都沒問題,一上線就BUG滿滿。估計大家遇到過與測試之間撕B的場景。

    用上docker,無論是在開發機,測試機,生產環境以容器執行,使應用在三種環境下保持一致。

    高效輕量

    對比虛擬機器,docker佔用資源更小。而且可以提高伺服器的資源利用率。

  • 10 # 急速馬力快de原始碼控

    回答之前,先反問一個問題:為什麼不用Docker呢?

    Docker出現之前,有現在還在用的VMWare虛擬機器,有Ghost,部分解決了伺服器安裝配置的瑣碎工作,但是沒有解決執行環境的問題。比如常見的環境不一致的問題:開發環境能執行,測試生產環境有bug?還有就是每次新伺服器、新環境搭建時無窮無盡的問題。

    那麼Docker出現後,整個環境被打包起來,也就是將所有安裝配置程式碼化自動化了,結合資源編排和雲服務,可以秒啟一個叢集化的web服務系統,如果沒有容器技術是做不到的。Docker是使用最普遍的容器技術,事實上的容器技術標準。

  • 11 # 錄院張三

    為什麼要用docker,這個首先要搞清楚什麼是docker。

    百度百科:Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。

    所以從工程管理及效率的角度來看,使用docker能夠很好的解決環境的差異性,並很好的提高專案的可管理性。

  • 12 # 程式猿大偉

    Docker

    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

    Docker特性Automating the packaging and deployment of applications(使應用的打包與部署自動化)Creation of lightweight, private PAAS environments(建立輕量、私密的PAAS環境)Automated testing and continuous integration/deployment(實現自動化測試和持續的整合/部署)Deploying and scaling web apps, databases and backend services(部署與擴充套件webapp、資料庫和後臺服務)Docker解決的問題應用更新發布及部署低效

    雲端計算、大資料,移動技術的快速發展,加之企業業務需求的不斷變化,導致企業架構要隨時更改以適合業務需求,跟上技術更新的步伐。毫無疑問,這些重擔都將壓在企業開發人員身上;團隊之間如何高效協調,快速交付產品,快速部署應用,以及滿足企業業務需求,是開發人員亟需解決的問題。Docker技術恰好可以幫助開發人員解決這些問題。

    環境一致性難以保證

    為了解決開發人員和運維人員之間的協作關係,加快應用交付速度,越來越多的企業引入了DevOps這一概念。但是,傳統的開發過程中,開發、測試、運維是三個獨立運作的團隊,團隊之間溝通不暢,開發運維之間衝突時有發生,導致協作效率低下,產品交付延遲, 影響了企業的業務執行。Docker技術將應用以集裝箱的方式打包交付,使應用在不同的團隊中共享,通過映象的方式應用可以部署於任何環境中。這樣避免了各團隊之間的協作問題的出現,成為企業實現DevOps目標的重要工具。以容器方式交付的Docker技術支援不斷地開發迭代,大大提升了產品開發和交付速度。

    不同環境遷移成本高

    此外,與通過Hypervisor把底層裝置虛擬化的虛擬機器不同,Docker直接移植於Linux核心之上,通過執行Linux程序將底層裝置虛擬隔離,這樣系統性能的損耗也要比虛擬機器低的多,幾乎可以忽略。同時,Docker應用容器的啟停非常高效,可以支援大規模的分佈系統的水平擴充套件,真正給企業開發帶來福音。

    Docker很大程度上解決了上述問題,提高開發和運維的工作效率,提高企業的工作效率。

    Docker的未來

    任何一項新技術的出現,都需要一個發展過程,比如雲計算為企業所接受用了將近五年左右時間,OpenStack技術也經歷了兩、三年才受到人們的認可。因此,雖然Docker技術發展很快,但技術還不夠成熟,對儲存的靈活的支援、網路的開銷和相容性方面還存在限制,這是Docker沒有被企業大範圍使用的一個主要原因。另外一個原因是企業文化是否與DevOps運動一致,只有企業支援DevOps,才能更大地發揮Docker的價值。最後一個原因就是安全性問題,Docker對於Linux這一層的安全的隔離還有待改進,才能進一步得到企業的認可。

  • 13 # Java實戰技術

    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

    Docker 跟傳統的虛擬化方式相比具有眾多的優勢,如下列出一些它的優勢。

    更高效的利用系統資源

    由於容器不需要進行硬體虛擬以及執行完整作業系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、記憶體損耗或者檔案儲存速度,都要比傳統虛擬機器技術更高效。因此,相比虛擬機器技術,一個相同配置的主機,往往可以執行更多數量的應用。

    更快速的啟動時間

    傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。

    一致的執行環境

    開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 「這段程式碼在我機器上沒問題啊」 這類問題。

    持續交付和部署

    對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。

    使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過 Dockerfile 來進行映象構建,並結合持續整合(Continuous Integration) 系統進行整合測試,而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。

    而且使用 Dockerfile 使映象構建透明化,不僅僅開發團隊可以理解應用執行環境,也方便運維團隊理解應用執行所需條件,幫助更好的生產環境中部署該映象。

    更輕鬆的移植

    由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上執行,無論是物理機、虛擬機器、公有云、私有云,甚至是筆記本,其執行結果是一致的。因此使用者可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況。

    更輕鬆的維護和擴充套件

    Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。此外,Docker 團隊同各個開源專案團隊一起維護了一大批高質量的官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。

    更好的隔離性

    用上了docker容器後,將Docker可以將我們的應用程式打包封裝到一個容器中。該容器包含了應用程式的程式碼、執行環境、依賴庫、配置檔案等必需的資源。容器之間達到程序級別的隔離,在容器中的操作,不會影響道宿主機和其他容器,這樣就不會出現應用之間相互影響的情形。

  • 中秋節和大豐收的關聯?
  • 比亞迪在未來的市場上都有哪些競爭力?