docker基礎篇——簡介

什麼是docker


docker基礎篇——簡介

上圖,docker是容器虛擬化技術,可以有多個容器(可以不同功能)且相互隔離,互不影響。容器沒有自己的內核,直接運行於宿主主機的內核。似乎跟虛擬機有點像。

docker與虛擬機的區別

虛擬機:


docker基礎篇——簡介

虛擬機需要有自己完整的操作系統,故需要宿主主機提供資源虛擬出一套物理資源(Hypervisor層)供虛擬機使用,系統鏡像往往較大,如標準的centos 7有4G多。

docker:


docker基礎篇——簡介

docker僅需要自身的應用和依賴庫,直接運行在宿主主機上,不需要宿主主機提供虛擬的物理資源。且更加的輕量,一個小的鏡像僅需要小几百MB。中間Docker引擎是否有點像java的虛擬機,docker鏡像也支持跨平臺,同一個鏡像直接可以在Linux、Windows、mac宿主主機上運行

docker優勢

主機資源利用率高(直接運行在宿主機內核,不需要硬件虛擬化)

啟動時間快(docker秒級比虛擬機快太多,虛擬機自身加載操作系統)

運行環境一致性(將應用同依賴環境打包成一個鏡像,避免多處部署不一致)

部署簡單(作為開發人員,學一個新東西就要去搭一個環境,而官方提供了很多鏡像可以直接使用,非常方便)

docker三元素

鏡像

操作系統分為內核和用戶空間,對於Linux而言,內核啟動後,會掛載root文件系統為其提供用戶空間支持。而Docker鏡像(Image),就相當於是一個root文件系統。Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

容器

鏡像(image)和容器(container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID空間。容器內的進程是運行在一個隔離的環境裡,使用起來,就好像是在一個獨立宿主的系統下操作一樣。這種特性使容器封裝的應用比直接在宿主運行更加安全。

倉庫

鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,docker registry就是這樣的服務。

存在鏡像的倉庫,有遠程倉庫、有本地倉庫。如同git。官網的鏡像倉庫:https://hub.docker.com/ 阿里雲鏡像倉庫:https://cr.console.aliyun.com/cn-hangzhou/images

倉庫/鏡像/容器這幾個概念之間關係的理解:

docker本身是一個容器運行載體或稱之為管理引擎。我們把應用程序和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就是image鏡像文件。只有通過這個鏡像文件才能生成docker容器。(image文件可以看作是容器的模板,docker根據image文件生成容器的實例。)同一個image文件可以生成多個同時運行的容器實例。


分享到:


相關文章: