Docker容器與虛擬機有什麼區別?

第一篇 http://virtual.51cto.com/art/201805/572135.htmhtml

Docker容器與虛擬機有什麼區別?

Docker是一個虛擬環境容器,能夠將你的可執行文件、配置文件及一切其餘你須要的文件一併打包到這個容器中,併發布和應用到任意平臺。好比,你在本地用Python開發了一個網站後臺,開發測試完成後,就能夠將Python3及其依賴包、Flask及其各類插件、Mysql、Nginx等打包到一個容器中,而後部署到任意你想部署到的環境。linux

Docker解決的主要問題sql

有事後臺開發經驗的同窗,必定遇到過下面這些問題:docker

程序在開發環境跑得好好的,可是部署到生產環境,卻情況頻出;編程

假設某個程序要在客戶的環境上進行部署,雖然在本身的環境上部署、驗證成功,但始終擔憂客戶的環境上缺乏某些必要的庫文件,或者某些文件的版本不符合要求;json

那麼,有了docker,這些問題都將不復存在。centos

什麼是Dockertomcat

Docker是一個虛擬環境容器,能夠將你的可執行文件、配置文件及一切其餘你須要的文件一併打包到這個容器中,併發布和應用到任意平臺。好比,你在本地用Python開發了一個網站後臺,開發測試完成後,就能夠將Python3及其依賴包、Flask及其各類插件、Mysql、Nginx等打包到一個容器中,而後部署到任意你想部署到的環境。安全

若是很差理解,咱們再拿集裝箱打個比方。服務器

集裝箱解決了什麼問題呢?在一艘大船上,能夠把貨物規整的擺放起來。而且各類各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不須要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裏封裝的好好的,那我就能夠用一艘大船把他們都運走。

docker也是相似的理念。咱們能夠在一臺機器上跑多個互相毫無關聯的docker容器,每個容器就至關於一個集裝箱。

Docker裏的幾個基本概念

  • 鏡像

鏡像能夠理解爲一堆靜態的文件

  • 容器

容器則是鏡像run起來以後的一個實例。鏡像之於容器就比如面向對象編程裏的class之於object。

  • 倉庫

鏡像須要地方保存,這個地方就是倉庫

與傳統虛擬化的區別

這裏咱們順便講一下傳統虛擬化。

咱們看到,傳統虛擬化是站在硬件物理資源的基礎上,虛擬出多個OS,而後在OS的基礎上構建相對獨立的程序運行環境,而Dokcer則是在OS的基礎上進行虛擬,顯然Dokcer輕量得多,所以其資源佔用、性能消耗相比傳統虛擬化都有很大優點。

科技銀狐

央視網高級工程師04-13 01:37

在IT行業從業多年,也算從看着時代從物理服務器走向虛擬化雲計算時代,又準備進入Docker時代,做爲下一代虛擬化技術,Docker正改變着整個行業開發、測試、部署應用的方式,至於虛擬化技術和docker技術到底有什麼不一樣,下面來分析一下。

01 什麼是虛擬化?

顧名思義,虛擬化技術是將物理資源以某種技術虛擬成資源池的形式,主要有一虛多和多虛一兩種形式,好比我的電腦安裝Vmware軟件,能夠在這個軟件上安裝其餘Win系統、MacOS、Linux系統等,實現一臺電腦/筆記本承載多個系統的優勢,目前蘋果筆記本用戶雙系統解決方案也以虛擬機爲主,普通Windows用戶可能需求量不大,而技術人員基本是必備軟件了。

 

從企業層面來看,多虛一爲主要形式,也就是將大量物理服務器集羣虛擬化,造成一個資源池,在這個資源上建立各類不一樣的虛擬機,實現靈活部署。

02 什麼是Docker

其實docker和虛擬技術很像,但又有一些不一樣點,一方面是兩個技術的層級上,虛擬機通常是底層硬件Hardware支撐,上層是虛擬管理系統Hypervisor層,在上層開啓不一樣的VM業務,若是須要將這些業務進行隔離,須要每一個VM啓動客戶機操做系統,很是消耗資源。

 

Docker徹底不一樣,底層有硬件和Host OS系統支撐,好比Windows/MacOS/Linux,中間拋去了臃腫的系統,而是以Docker守護進程代替,上層創建不一樣的容器,不一樣的應用鏡像打包在不一樣的容器中,他們互相隔離。

03 虛擬化與docker的區別

docker設計小巧,部署遷移快速,運行高效,應用之間相互獨立,管理人員能夠看到全部容器的內容,虛擬化技術比較臃腫,不論什麼應用都須要先建立新的系統,而且並不是按照應用隔離,而是按照系統隔離,管理員沒法看到系統內部信息。

舉個例子,Docker就是手機中的各類APP,只須要一個系統就能夠下載本身所需的應用,可是虛擬化技術至關於你的蘋果手機安裝一個龐大軟件,這個軟件上安裝安卓系統、魅族系統等,每一個系統上還要安裝各種應用,比較麻煩。

但二者沒有絕對的好壞,主要仍是看應用場景,根據不一樣的需求選擇不一樣的解決方案便可。

 

第二篇 http://m.elecfans.com/article/648468.html

Docker 是 Golang 編寫的, 自 2013 年推出以來,受到愈來愈多的開發者的關注。若是你關注最新的技術發展,那麼你必定據說過 Docker。無論是雲服務仍是微服務(Microservices),愈來愈多的廠商都開始基於 Docker 做爲基礎設施自動化的工具。那麼什麼是 Docker?Docker與傳統的虛擬機有什麼區別?爲什麼要採用 Docker?如何使用 Docker?

本文,就針對上述提到的問題,來簡單介紹下 Docker。

什麼是 Docker

Docker 是開源的應用容器引擎。

Docker 可讓你將全部應用軟件以及它的以來打包成軟件開發的標準化單元。

Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時、系統工具、系統庫)打包到一塊兒,這就保證了無論是在什麼樣的運行環境,老是能以相同的方式運行。就好像 Java 虛擬機同樣,「一次編寫,處處運行(Write once, run anywhere)」,而 Docker 是「一次構建,處處運行(Build once,run anywhere)」。

Docker 是一種「容器即服務」(Docker Containers as a Service ,簡稱 CaaS),使得開發和IT運營團隊能夠對於應用的構建、發佈、運行更加敏捷和可控。

歸納的說: Docker 是爲開發人員和系統管理員用於構建、發佈、並運行分佈式應用程序的開放式平臺。該平臺由 Docker 引擎(一個便攜、輕巧的運行時和打包工具) 和 Docker Hub (一個共享應用程序和自動化工做流的雲服務)等組成。Docker 可使應用程序從組件迅速組裝並消除了開發、質量保證和生產環境之間的摩擦問題。這樣一來,IT部門能夠更快地發佈,而這些應用程序無論是運行在筆記本電腦、數據中心的虛擬機,仍是任何的雲,其運行過程和結果都是一致的。

咱們再來看下 Docker 的 Logo 。很明顯,這是一隻鯨魚,它託着許多集裝箱。咱們能夠把宿主機可當作這隻鯨魚,把相互隔離的容器可當作集裝箱,每一個集裝箱中都包含本身的應用程序。這 Logo 簡直的太形象了!

Docker 的優勢

輕量級:全部容器在一臺機器上共享同一個操做系統內核,這樣他們當即開始,並更有效地利用內存。Image 是從分層文件系統的構建,這樣他們可以共享公共文件,使得磁盤使用率和 Image 的下載更加高效。

開放:Docker 容器是基於開發的標準,容許容器運行在主流的 Linux 發佈版和 Microsoft 操做系統做爲全部的基礎設施。

安全:容器使得應用程序彼此隔離,而基礎架構同時爲應用程序提供了額外的保護層。

Docker 與 虛擬機的區別

容器與虛擬機有着相似的資源隔離和分配的優勢,但不一樣的架構方法使容器可以更加便攜,高效等。

虛擬機的架構

每一個虛擬機都包括應用程序、必要的二進制文件和庫以及一個完整的客戶操做系統(Guest OS),儘管它們被分離,它們共享並利用主機的硬件資源,將近須要十幾個 GB 的大小。

容器的架構

容器包括應用程序及其全部的依賴,但與其餘容器共享內核。它們以獨立的用戶空間進程形式運行在主機操做系統上。他們也不依賴於任何特定的基礎設施,Docker 容器能夠運行在任何計算機上,任何基礎設施和任何雲上。

Docker 的容器利用了 LXC,管理利用了 namespaces 來作權限的控制和隔離,cgroups 來進行資源的配置,而且還經過 aufs 來進一步提升文件系統的資源利用率,而這些技術都不是 Docker 首創。

LXC

LXC 與虛擬機的不一樣之處在於,它是一個操做系統級別的虛擬化環境,而不是硬件虛擬化環境。他們都作一樣的事情,但 LXC 是操做系統級別的虛擬化環境,虛擬環境有它本身的進程和網絡空間,而不是建立一個完整成熟的虛擬機。所以,一個 LXC 虛擬操做系統具備最小的資源需求,並啓動只需幾秒鐘。

正如你能夠在下圖中看到的,左側是 LXC 虛擬的 Ubuntu ,默認安裝使用 11 MB 大小。

Docker 與 Microservices 的關係

Microservices(微服務) 依賴於「基礎設施自動化」,而 Docker 正是「基礎設施自動化」的利器。能夠說 Docker 的火爆,必定程度上也帶動了微服務架構的興起,而微服務的普遍應用也促進了 Docker 繁榮。能夠說二者相輔相成。

有關微服務的介紹,能夠移步至《簡述 Microservices(微服務)》。

http://www.importnew.com/24651.html

爲何要用 Docker

開發更加敏捷:Docker 讓開發人員能夠自由定義環境,建立和部署的應用程序更快、更容易,IT 運維人員快速應對變化也更加靈活性。

更加可控:Docker 使得開發人員保存從基礎設施到應用的代碼,幫助 IT 運維人管理擁有標準的、安全的、可擴展的操做環境。

高可移植性:Docker 容許自由選擇,能夠是從筆記本電腦到一個團隊,從私人基礎設施到公共雲提供商。

這樣,你能夠專一於開發應用,其餘的繁雜事交給 Docker 去作吧。

如何使用 Docker

這可真是一個大話題,若是完整闡述足夠寫一本書了。好在咱們的目的是作入門普及,所以咱們就簡單講一下 Docker 的安裝、基本使用和經常使用命令。

Docker安裝

建議在linux環境下安裝Docker,window環境搭建比較複雜且容易出錯,使用Centos7+yum來安裝Docker環境很方便。

Docker 軟件包已經包括在默認的 CentOS-Extras 軟件源裏。所以想要安裝 docker,只須要運行下面的 yum 命令:

yum install docker

安裝完成後,使用下面的命令來啓動 docker 服務,並將其設置爲開機啓動:

service docker startchkconfig docker on

LCTT 譯註:此處採用了舊式的 sysv 語法,如採用CentOS 7中支持的新式 systemd 語法,以下:

service docker startchkconfig docker on

測試

docker version

輸入上述命令,返回docker的版本相關信息,證實docker安裝成功。

Hello World

下面,咱們經過最簡單的 image 文件"hello world",感覺一下 Docker。

由於國內鏈接 Docker 的官方倉庫很慢,所以咱們在平常使用中會使用Docker 中國加速器。經過 Docker 官方鏡像加速,中國區用戶可以快速訪問最流行的 Docker 鏡像。該鏡像託管於中國大陸,本地用戶如今將會享受到更快的下載速度和更強的穩定性,從而可以更敏捷地開發和交付 Docker 化應用。

Docker 中國官方鏡像加速可經過 registry.docker-cn.com訪問。該鏡像庫只包含流行的公有鏡像,私有鏡像仍須要從美國鏡像庫中拉取。

修改系統中docker對應的配置文件便可,以下:

vi /etc/docker/daemon.json#添加後{ "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true}

運行下面的命令,將 image 文件從倉庫抓取到本地。

docker pull library/hello-world

上面代碼中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在倉庫裏面的位置,其中library是 image 文件所在的組,hello-world是 image 文件的名字。

抓取成功之後,就能夠在本機看到這個 image 文件了。

docker images#顯示結果REPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/hello-world latest f2a91732366c 3 months ago 1.848 kB

如今,運行這個 image 文件。

docker run hello-world#顯示結果Hello from Docker!This message shows that your installation appears to be working correctly....

輸出這段提示之後,hello world就會中止運行,容器自動終止。有些容器不會自動終止,由於提供的是服務,好比Mysql鏡像等。

經常使用命令

除過以上咱們使用的Docker命令外,Docker還有一些其它經常使用的命令。

拉取docker鏡像

docker pull image_name

查看宿主機上的鏡像,Docker鏡像保存在/var/lib/docker目錄下:

docker images

刪除鏡像

docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30

查看當前有哪些容器正在運行

docker ps

查看全部容器

docker ps -a

啓動、中止、重啓容器命令:

docker start container_name/container_iddocker stop container_name/container_iddocker restart container_name/container_id

後臺啓動一個容器後,若是想進入到這個容器,可使用attach命令:

docker attach container_name/container_id

刪除容器的命令

docker rm container_name/container_id

查看當前系統Docker信息

docker info

從Docker hub上下載某個鏡像:

docker pull centos:latestdocker pull centos:latest

執行docker pull centos會將Centos這個倉庫下面的全部鏡像下載到本地repository

相關文章
相關標籤/搜索