回覆列表
  • 1 # 技術簡說

    要回答這個問題,需要先了解虛擬機器和docker的根本區別是什麼。

    從計算機軟體層級來看,docker和虛擬機器的區別在於虛擬的軟體層級不一樣。虛擬機器基於同一個硬體,模擬出不同的作業系統;而docker基於同一個作業系統,模擬出不同的執行時環境。我們依次來看:

    1. 先看看計算機的軟體層次,從下到上依次為:作業系統核心、檔案系統(執行時環境)、上層APP。

    2. 虛擬機器執行在同一個硬體上,可以虛擬出不同的作業系統。比如vmware可以在一臺pc上既模擬出一個windows系統,同時也可以模擬出一臺linux系統。藉助虛擬機器,兩個不同的作業系統可以同時執行在同一個硬體之上。

    3. 而docker則執行在同一個作業系統核心上,虛擬出不同的檔案系統或者也可以叫做執行時環境。不同的執行時環境,其對應的檔案系統也是不同的。比如java的執行時環境就要求檔案系統裡存在jdk,而golang的執行時環境則需要有go相關的底層庫。在docker上既可以虛擬出一個java的執行時環境,也可以虛擬出go的執行時環境。甚至,基於docker,你既可以虛擬出一個java-1.6的執行時候環境,也可以虛擬出一個java-1.8的執行時環境,而這兩個執行時環境可以同時執行在同一個作業系統之上。

    瞭解了虛擬機器和docker的區別之後,那我們來看看樓主提出來的問題。這個問題的核心在於對“生產伺服器”的理解。

    如果把“生產伺服器”理解成一個作業系統或者和作業系統緊耦合的環境,比如windows系統,那麼顯然是無法在docker上執行的;如果把“生產伺服器”理解成一個獨立的執行時環境,那麼按照我們在上面的講述,顯然是可以在docker上執行的。

    但是,我認為第二種解釋要比較合理。

  • 2 # 數智風

    Docker中文叫容器,和虛擬機器有很多相似之處,也有諸多不同之處。用來執行生產系統,都是沒問題的。虛擬機器具有普適性,而Docker的輕量化更適合微服務架構的應用,下面我們就來了解一下:

    1、Docker和虛擬機器異同點

    ①、虛擬機器

    說起虛擬機器我們都非常熟悉。它利用虛擬化技術將作業系統和物理伺服器脫離關係,虛擬機器透過虛擬層和宿主物理伺服器打交道。這樣,我們的宿主物理伺服器只要效能足夠,就可以執行大量的虛擬機器。而虛擬機器因為脫離了物理硬體的捆綁關係,也就具備了很多優點:

    完整性:虛擬機器就是打包了作業系統、虛擬硬體等等的一組檔案,它具有真實計算的完整功能;獨立性:虛擬機器和虛擬機器之間本身是互相隔離的,就算兩臺虛擬機器在同一臺宿主機上,也不會因為其中一臺虛擬機器出問題,導致另外一臺虛擬機器出問題。可移植性:整個虛擬機器是一組檔案,可以很方便的複製遷移。一遷移就是這個系統都遷移出去了。高可用性:虛擬機器因為和物理伺服器脫離了捆綁關係,它可以在被虛擬化的伺服器中自由漂移。任何一臺物理伺服器出現故障,虛擬機器並不會因此無法工作。同時,當然虛擬化平臺還提供了效能負載均衡和災備的一些特性。高效能:單個虛擬機器是無法突破宿主物理伺服器的效能的,那如果要實現更大的效能,虛擬機器可以組建叢集,將叢集虛擬機器分佈在不同的物理伺服器中來實現。

    當然,虛擬機器不止我這裡說的好處。它是雲計算的最基礎技術,沒有它就無法實現雲計算。

    ②、Docker

    Docker是在虛擬機器之後才出現的技術。它也是在作業系統之上的輕量化虛擬技術。它可以執行在傳統的物理伺服器上,也可以執行在虛擬機器之中。它是將應用系統的執行環境和應用軟體打包在一起的技術,它也具備很多優點:

    獨立性:每一個Docker都是一套應用軟體和配套環境,和其他Docker是互相隔離的;便捷性:軟體從開發者手上開發出來到使用者這邊,只需一個Docker映象就可以把開發者的完整環境搬到使用者這邊。無需重新配置環境。可移植性:Docker的可移植性主要是應用軟體和環境可以快速遷移。高可用:Docker本身無法實現高可用。它需要藉助分散式管理平臺來實現高可用性,比如:著名的谷歌K8S,是一整套非常不錯的分散式管理程式,已經可以實現所謂的“容器雲”高效能:同樣是透過分散式管理平臺,來實現多個Docker的叢集。效能不夠就加Docker。

    虛擬機器和Docker都具有高可用和高效能的特點,他們都是一種虛擬化的技術。但兩者也存在很多的不同點:

    虛擬機器的虛擬化處在更宏觀的層面,作業系統都被打包進去。優點在於無需重灌系統,而且虛擬化可以和硬體直接打交道,效能排程掌握在虛擬平臺上,缺點在於,每一個虛擬機器都需要執行一套作業系統。而Docker的虛擬化則在更微觀的層面,它並不是完整計算環境,它只打包了應用程式和環境,所以,缺點在於排程硬體的效能取決於外在作業系統,同時,Docker太多後關係非常複雜,人工是很難理清楚效能問題和故障的,還好容器平臺都有自動化工具。它的優點就是非常輕量化,應用可移植性非常強,對軟體開發來說非常方便。2、Docker可以取代虛擬機器的地方

    透過上面虛擬機器和Docker的對比發現,Dokcer更適合當前採用微服務架構的應用軟體開發、部署、運維的所有過程。那到底什麼是微服務架構呢?

    這個起源於網際網路公司,網際網路的軟體都是需要快速上線,持續迭代更新,又有大量的輕量併發訪問。基於這些特點,網際網路公司通常將一個大型的應用程式和服務拆分為數個甚至數十個的支援微服務,通常擴充套件單個元件而不是整個的應用程式堆疊,從而滿足網際網路訪問這種特性。這就是我們常說的微服務。架構對比示意圖如下:

    從圖中,我們可以看到傳統架構是一個緊耦合的應用,各個模組都是整合在一個應用裡面。不僅應用對效能要求高,資料庫對效能要求也高。自然不適合Docker來做,更適合虛擬化或者物理叢集來做。而微服務架構則不同,拆散成了很多個微小的服務元件,這樣就比較適合Docker來開發部署了。

    當然,現在微服務架構已經不侷限在網際網路公司用了。只要具有網際網路軟體相似特點的應用,都可以採用微服務架構來開發。所以,Docker也就被用的越來越多。但Docker和虛擬化並不是互相排斥的,反而是相互貫通的。

    3、Docker和虛擬機器是互相貫通的

    因為Docker是微型虛擬化的容器,它可以執行在物理機作業系統上,也可以執行在虛擬機器的作業系統之上。所以,Docker和虛擬機器並不互相矛盾。反而是相輔相成的。現在,很多網際網路應用都是在虛擬機器組建的雲端上部署Docker應用。這樣既有云計算的彈性效能提供,也有Docker快速靈活部署應用的特點。是相輔相成的絕佳方法。

    總結

    總之,Docker是輕量級的虛擬化,只打包軟體和軟體執行環境。而虛擬機器則是打包作業系統的重量級虛擬化。兩者之間有虛擬化的共同特點,也有自己的獨特性。在實際使用中,Docker非常適合採用微服務架構的軟體開發、部署、運維。而虛擬機器則普適性比較廣,但它和Docker是互相貫通的,相輔相成的,並不矛盾衝突。

  • 3 # AlrinNi

    這個沒有絕對。看你的應用量級的。

    一些邊緣的小應用,不能去除,又不會有很大的訪問量,儘管丟docker好了。。。

  • 4 # shenfengyi11

    docker實際上也是一個虛擬機器,只不過是把一個真實的主機或者虛擬機器再拆成多個docker,然而每個docker的資源可以按需分配,從而達到提高資源利用最大化的目的。

  • 5 # 夢醒時分top

    看系統的要求了。docker不可能完全替代全部,windows伺服器不可以,軟體系統沒有使用docker重新載入的,也是很難的。

  • 6 # Java成長之路

    這個問題太好了,最近一直在學習docker,剛好昨天才把學習筆記整理出來釋出到部落格上。首先答案是可以的,具體怎樣看我下面回答

    首先說下伺服器幹嘛的,不就是為您的應用程式做服務的嗎,把一個程式部署到服務就可以透過網址訪問了。

    那docker是幹嘛的呢,也是為應用程式做服務的,是一個容器專門盛放應用程式的。把一個應用放到docker中就可以訪問了。伺服器與docker有什麼不同?一個專案開發的過程中是不是經常碰到一個問題,在我這邊執行的沒問題啊,怎麼在你那邊執行就有問題呢?然後摔鍋

    應用部署到伺服器上的過程:因為我是做java開發的,就拿一個正常的java專案舉例。首先需要在伺服器上搭建基礎環境:

    配置jdk

    配置tomcat

    配置mysql配置redis

    這只是一個簡單的專案的部署前的配置,之後把您的專案打包傳送的tomcat,執行即可。那如果有十幾個伺服器需要部署呢?是不是就要配置環境十多次,那人不是崩潰了。而且還會出現開發那邊執行沒問題,部署上去有問題的事情。所以這個時候docker出來了。應用部署到docker上的過程:

    開發環境下直接打包成映象

    把映象上傳到docker容器即可

    兩步搞定,不需要配置複雜的環境。如果有十多個容器需要部署怎麼辦?直接遠端下載映象即可,是不是很簡單。

  • 7 # 會點程式碼的大叔

    正面回答這個問題之前,先看看虛擬機器和Dcoker的區別。

    虛擬機器:在一臺物理機器上,利用虛擬化技術,虛擬出來多個作業系統,每個作業系統之間是隔離的。舉例說明:電腦上安裝作業系統,比如我們安裝了win10的作業系統;再往上安裝虛擬機器軟體,比如我們常用的VirtualBox、VMWare,它們的作用是模擬計算機硬體;這樣虛擬機器模擬出來的作業系統了;在虛擬的作業系統中,安裝所需的軟體、元件等。比如我們在虛擬作業系統中安裝JDK、Tomcat等;最後就是具體的應用了,也就是把應用部署到Tomcat中。

    Docker:官方解釋是開源的應用容器引擎。用人話解釋一下:依然需要現在電腦上安裝作業系統, 然後安裝Docker容器的管理器,到了這一步,不需要自己安裝JDK和Tomcat,而是由開發人員將素有的依賴和應用都被打包成了Docker映象。例如,JDK、Tomcat、應用都被打包在了一起,執行在Docker容器裡,容器和容器間是隔離的。

    總結一下虛擬機器和Docker的區別:

    從兩者的架構圖上看,虛擬機器是在硬體級別進行虛擬化,模擬硬體搭建作業系統;而Docker是在作業系統的層面虛擬化,複用作業系統,執行Docker容器。

    Docker的速度很快,秒級,而虛擬機器的速度通常要按分鐘計算。

    Docker所用的資源更少,效能更高。同樣一個物理機器,Docker執行的映象數量遠多於虛擬機器的數量。

    虛擬機器實現了作業系統之間的隔離,Docker算是程序之間的隔離,虛擬機器隔離級別更高、安全性方面也更強。

    再正面回答一下“Docker可以代替虛擬機器執行生產伺服器麼”?

    Docker是可以用於生產環境的;但是Docker是有學習成本的,前期要踩不少的坑;如果沒有容器叢集管理工具的話,只用Docker的話,沒有太大必要(人肉維護?開發和運維都會死的);虛擬機器和Docker各有優勢,很多企業都採用物理機上做虛擬機器,虛擬機器中跑Docker的方式。總之,要說Docker代替虛擬機器還為時過早,至少短期內不會;
  • 8 # 芝麻技術棧

    答案肯定是可以的,這已經是當前的流行趨勢,從mysql就能看得出來,資料庫這麼重要的東西都能透過docker來執行,更不用說我們的小專案了;如果說你們公司還沒有應用docker和kubernetes,只能說你們是傳統行業,技術迭代的速度有點兒慢。

    docker有如下特點

    標準:Docker映象有著同樣的標準,可移植,可以根據映象快速構建容器服務。

    輕量級:容器共享物理機器,每個應用程式不需要單獨的作業系統,從而提高伺服器利用率。

    安全:應用程式在容器中更安全,Docker提供業界最強的預設隔離功能。

    傳統虛擬機器相比docker而言:

    虛擬機器是將一臺伺服器轉變為多臺伺服器的物理硬體的抽象,允許多個虛擬機器在一臺機器上執行,每個虛擬機器都包含一個作業系統、應用程式、必要的二進位制檔案和庫的完整副本,佔用了數十個GB,另外虛擬機器的啟動速度也很慢。

    除此之外相比傳統的部署方式,每次都是安裝完一個軟體再安裝另一個軟體,大量重複的工作,並且在安裝過程中易出錯,結果難易保證。和docker相比較,方便、易管理、標準等以上特性還不足以讓你去嘗試嗎?

  • 9 # 懸鐘Mr

    首先,大家需要明確一點,Docker容器不是虛擬機器。

    正面回答這個問題之前,先看看虛擬機器和Dcoker的區別。虛擬機器:在一臺物理機器上,利用虛擬化技術,虛擬出來多個作業系統,每個作業系統之間是隔離的。舉例說明:電腦上安裝作業系統,比如我們安裝了win10的作業系統;再往上安裝虛擬機器軟體,比如我們常用的VirtualBox、VMWare,它們的作用是模擬計算機...

    Docker容器虛擬化的好處 Docker專案的發起人和Docker Inc.的CTO Solomon Hykes認為,Docker在正確的地點、正確的時間順應了正確的趨勢—即高效地構建應用。現在開發者需要能方便地建立執行在雲平臺上的應用,也就是說應用必須能夠脫離底層機器,而且同時必須是“任何時間任何地點”可獲取的。...

    使用 虛擬機器 執行多個相互隔離的應用時,如下圖: 從下到上理解上圖: 基礎...因此,我們需要根據不同的應用場景和需求採用不同的方式使用Docker技術或使用伺服器虛擬化技術。...使用 虛擬機器 執行多個相互隔離的應用時,如下圖: 從下到上理解上圖: 基礎因此,我們需要根據不同的應用場景和需求採用不同的方式使用Docker技術或使用伺服器虛擬化技術。

    每日分享科技領域相關內容,有緣相遇,期待關注。在IT行業從業多年,也算從看著時代從物理伺服器走向虛擬化雲計算時代,又準備進入Docker時代,作為下一代虛擬化技術,Docker正改變著整個行業開發、測試、部署應用的方式,至於虛擬化技術和docker技術到底有什麼不同,下面來分析一下。01 什麼是虛擬化...我們單位最近在推docker,已經在開發測試環境使用(稍顯落後),下面我就談談自己的Docker的理解,以及Docker和虛擬機器的區別。虛擬機器先說說什麼是虛擬機器:在一臺物理機器上

    有幸經歷傳統企業的網際網路化轉型過程,從一參加工作開始跟著領導做去IOE化,大規模引入開源中介軟體,在此環境中,Docker進入我們的視野,在測試環境中開始手動部署Docker。由於公司的資源有限,我們的Docker部署採用三層體系,即物理機之上部署虛擬機器,然後虛擬機器中部署Docker,每個Docker執行只部署...使用 Docker,開發人員只需要關心容器中執行的應用程式,而運維人員只需要關心如 何管理容器。Docker 設計的目的就是要加強開發人員寫程式碼的開發環境與應用程式要部署 的

    大家好,我是小棗君。這個問題,我從頭給你梳理一下吧: “雲計算”這個詞,相信大家都非常熟悉了。作為IT行業的熱門技術,它頻繁出現在各大媒體的新聞報道中。BAT這樣的網際網路企業,也經常把它掛在嘴邊。相信很多人都想學習雲計算,跟上技術潮流。如果對雲計算有一定了解的話,應該會或多或少地聽到...虛擬機器執行在hypervisor之上。第二類,物理機上安裝正常的作業系統(例如Linux或Windows),然後在正常作業系統上安裝hypervisor,生成和管理虛擬機器。像VMware、KVM、Xen、

    沒有固定的演算法。但是一般會有幾個限制:1.記憶體記憶體基本上是一個硬限制。物理伺服器的記憶體肯定是有限的。例如,一臺伺服器有8 core,8G記憶體,通常hypervisor會佔用512M記憶體,大概還剩下7.5G記憶體,假設每個虛擬機器的配置是1 core cpu,1G記憶體,那麼在此機器上最多可以執行7個這樣的虛擬機器。再建立...網絡卡如果伺服器只有一個網絡卡,所有虛擬機器的網路流量都是透過一塊網絡卡出去,虛擬機器越多,每個虛擬機器可以使用的頻寬就會越少,這個是需要綜合考慮。例如使用多個網絡卡等。3.

    步驟1:為我們的容器建立第一個映象 以 centos 映象作為基礎映象,我們啟動自己的容器並在其中執行/bin/bash命令 注:-t-i 引數用於建立一個虛擬的命令列。sudo docker run-t-i centos/bin/bash 現在我們已經成功的運行了自己的第一個容器,並且進入到容器的命令列介面中。在容器中,我們執行...虛擬機器的80埠在 Vagrantfile 中被繫結到主機的8080埠,也就是:主機8080->虛擬機器80->容器80 sudo docker run-t-i-p 80:80-v/vagrant/htdocs:/var/

    關於docker容器與虛擬機器的對比,難道不是Docker官網講解的最好嗎?先從認識容器開始 將軟體打包成標準...虛擬機器(VM)是一個物理硬體層抽象,用於將一臺伺服器變成多臺伺服器。...關於docker容器與虛擬機器的對比,難道不是Docker官網講解的最好嗎?先從認識容器開始 將軟體打包成標準虛擬機器(VM)是一個物理硬體層抽象,用於將一臺伺服器變成多臺伺服器。

    建議選擇雙至強8核以上處理器.16G以上記憶體.1000G以上硬碟的配置.網絡卡選擇雙千M的.推薦用DELLR410或者DELLC1100等機型.託管到IDC機房以後建議用50G以上獨享頻寬.除此以外還需要你有一套虛擬主機管理系統以及20個以上的獨立IP.用來分配與管理虛擬機器. 考慮到成本和風險問題.建議你直接到IDC公司...然後一天開機時間需要到20個小時左右,主要想記憶體方面大1225 2G/500S,E3-1225的CPU,標配2G ECC記憶體,500G硬碟×2 RAID,要執行20個虛擬機器得自己再添4G記憶體這樣子。

    使用虛擬機器執行多個相互隔離的應用時,如下圖:

    從下到上理解上圖:

    基礎設施(Infrastructure)。它可以是你的個人電腦,資料中心的伺服器,或者是雲主機。主作業系統(Host Operating System)。你的個人電腦之上,執行的可能是MacOS,Windows或者某個Linux發行版。虛擬機器管理系統(Hypervisor)。利用Hypervisor,可以在主作業系統之上執行多個不同的從作業系統。型別1的Hypervisor有支援MacOS的HyperKit,支援Windows的Hyper-V以及支援Linux的KVM。型別2的Hypervisor有VirtualBox和VMWare。從作業系統(Guest Operating System)。假設你需要執行3個相互隔離的應用,則需要使用Hypervisor啟動3個從作業系統,也就是3個虛擬機器。這些虛擬機器都非常大,也許有700MB,這就意味著它們將佔用2.1GB的磁碟空間。更糟糕的是,它們還會消耗很多CPU和記憶體。各種依賴。每一個從作業系統都需要安裝許多依賴。如果你的的應用需要連線PostgreSQL的話,則需要安裝libpq-dev;如果你使用Ruby的話,應該需要安裝gems;如果使用其他程式語言,比如Python或者Node.js,都會需要安裝對應的依賴庫。應用。安裝依賴之後,就可以在各個從作業系統分別執行應用了,這樣各個應用就是相互隔離的。

    理解Docker容器

    使用Docker容器執行多個相互隔離的應用時,如下圖:

    不難發現,相比於虛擬機器,Docker要簡潔很多。因為我們不需要執行一個臃腫的從作業系統了。

    從下到上理解上圖:

    基礎設施(Infrastructure)。主作業系統(Host Operating System)。所有主流的Linux發行版都可以執行Docker。對於MacOS和Windows,也有一些辦法”執行”Docker。Docker守護程序(Docker Daemon)。Docker守護程序取代了Hypervisor,它是執行在作業系統之上的後臺程序,負責管理Docker容器。各種依賴。對於Docker,應用的所有依賴都打包在Docker映象中,Docker容器是基於Docker映象建立的。應用。應用的原始碼與它的依賴都打包在Docker映象中,不同的應用需要不同的Docker映象。不同的應用執行在不同的Docker容器中,它們是相互隔離的。

    對比虛擬機器與Docker

    Docker守護程序可以直接與主作業系統進行通訊,為各個Docker容器分配資源;它還可以將容器與主作業系統隔離,並將各個容器互相隔離。虛擬機器啟動需要數分鐘,而Docker容器可以在數毫秒內啟動。由於沒有臃腫的從作業系統,Docker可以節省大量的磁碟空間以及其他系統資源。

    說了這麼多Docker的優勢,大家也沒有必要完全否定虛擬機器技術,因為兩者有不同的使用場景。虛擬機器更擅長於徹底隔離整個執行環境。例如,雲服務提供商通常採用虛擬機器技術隔離不同的使用者。而Docker通常用於隔離不同的應用,例如前端,後端以及資料庫。

  • 10 # LennyDou

    docker只是一種輕量級隔離技術,本質上它與宿主機共用一個核心;虛擬機器是比較完全的隔離技術,它和宿主機用不同的核心

  • 11 # 樂百川

    先來簡單區分一下虛擬機器和docker兩個概念。

    虛擬機器一般指的是完全虛擬化的那種,在虛擬機器內部和外部系統是完全隔離的,一般我們買的阿里雲什麼的虛擬主機都是這種,這樣的優點是安全,因為虛擬機器內部怎麼亂搞都不會影響主系統,缺點也有,就是效能略差。這裡效能差主要在於系統讀寫操作,執行速度的話差不了多少,因為現在的處理器都原生支援虛擬化。

    docker是目前衍生出來的新技術,有點類似虛擬機器,可以將要執行的專案裡各種執行庫打包起來,這樣我們運維的時候不需要一個一個安裝那些依賴,直接下載一個docker包即可,大大簡化了部署流程。所以現在docker已經成為了主流。但是docker並不是虛擬機器那樣的全虛擬化,而是半虛擬化,雖然內部有自己的檔案系統,但是程序什麼的並不是完全獨立的,可以在主系統中看到。

    這裡我不清楚題目中的“用docker執行生產伺服器”是什麼意思。如果說的是能不能把專案做成docker來用,那麼答案自然是可以的,因為docker本來設計出來就是這麼用的。如果意思是能不能用docker代替虛擬機器來執行伺服器系統本身,那麼當然是不行的。虛擬機器具有docker所不具備的特性,不能簡單的和docker做替代。

  • 12 # web說

    大部分場景應該都可以。因為我們一般要的不是作業系統本身,而是應用程式執行的環境,如PHP應用我們太多數要的就是對映Url並解析執行PHP程式碼的環境,而不是作業系統。相反的作業系統因為同時跑了其他許多程序,反而會影響到我們應用的效能甚至安全。

    docker最大好處就是一個容器一個程序,跑的就是我們的應用,只要環境能夠docker化,應用就可以了。

  • 13 # wujianqinjian

    理論上是完全可以的,現實中公司也有人這麼做了!

    問題:

    1 docker作為比較新興的一門技術,雖然帶來容器化管理的便捷性,但也增加學習成本

    2 docker作為單一服務服務來說,簡單快捷,但整套系統都使用docker,docker和docker之間的通訊問題等,對設計者來說是一個需要新的思維去搭建合理架構

    3 docker相對於傳統的伺服器部署,可以搜尋到的資料相對較少,出問題排查困難

    總結:docker作為一款比較成熟的新興技術,雖然提供了一系列的便捷之處,

    但想直接代替伺服器,還要經過嚴謹的驗證測試再實施!

    結論:

    1 docker可以直接安裝在linux物理機上,然後構建容器來執行專案

    2 一般情況docker構建虛擬在虛擬機器上,能夠更加方便維護

  • 中秋節和大豐收的關聯?
  • 十元店利潤有多少?