docker,你真正懂了嗎?

docker是PaaS提供商dotCloud開源的一個基于LXC的高級容器引擎,基于go語言并遵循Apache2.0協(xié)議,源碼托管于GitHub。

docker解決什么問題

docker解決什么問題?容器是怎么運行的?和虛機有什么不同?老外眼里的container是集裝箱不是中國人說的容器。docker有哪些優(yōu)缺點?

容器和虛機的不同

虛機有自己的OS操作系統(tǒng),獨立于主機OS,宿主型hypervisor將虛機當作一個個進程運行在主機上,虛機內核可以和主機不同。

宿主型hypervisor包括開源OpenStack的kvm,VMware的vSphere,微軟的Hyper-V、思杰Citrix的XenServer 、IBM的PowerVM、Red Hat的Enterprise Virtulization、華為的FusionSphere,中興的TECS KVM。

裸機型hypervisor本文先不介紹。

虛機運行在宿主型hypervisor

容器之間共享主機的OS操作系統(tǒng),容器引擎將容器當作一個個進程運行在主機上,虛機內核是使用的主機內核,因此依賴于主機內核版本,且不便于升級。

容器引擎包括docker,CoreOS的rkt和Mesos的Mesos containerizer。當然主流還是docker。

容器運行在docker上

容器運行在host操作系統(tǒng)的用戶空間,與操作系統(tǒng)其他進程隔離。在容器啟動時不需要啟動內核空間,所以啟動時比虛機較快,開銷少,易遷移。

對比完虛機和容器的不同,我們還是回到主咖docker來介紹。

Docker 將集裝箱思想(分類管理貨物,不受運輸時外界帶來的損壞)運用到軟件打包(容器特性build onece can run anywhere意味著環(huán)境隔離,運行一次后打包可在其他環(huán)境上運行)上,為代碼提供了一個基于容器的標準化運輸系統(tǒng)。

docker并不是全能的,局限在于無法在33位的Windows/Linux環(huán)境下使用,基于Linux 64位的。cgroup的CPU和CPUset提供的CPU功能相比KVM等虛擬化方案難以度量(dotCloud主要按照內存收費),docker對磁盤管理能力有限,container隨著用戶進程的停止銷毀導致用戶log不便收集。docker網(wǎng)絡管理簡單,主要是基于namespace隔離。

docker架構篇

docker架構篇Docker 采用的是 Client/Server 架構,包含client,docker daemon服務端,image鏡像,registry軟件倉庫,docker container共5部分。客戶端向服務器發(fā)送請求,服務器負責構建、運行和分發(fā)容器??蛻舳撕头掌骺梢赃\行在同一個 Host 上,客戶端也可以通過 socket 或 REST API 與遠程的服務器通信。

docker架構
docker鏡像篇

docker如何構建鏡像什么是base鏡像?Linux系統(tǒng)包含內核空間kernel和用戶空間rootfs兩部分,容器只使用各自的rootfs但共用host的kernel,這就產生鏡像結構分成,但為何產生鏡像結構分層?如何查查看鏡像分層結構?

Linux 操作系統(tǒng)組成

所有容器都共用 host 的 kernel,在容器中沒辦法對 kernel 升級。

容器共用host的內核

base 鏡像有兩層含義:不依賴其他鏡像,從 scratch 構建。其他鏡像可以之為基礎進行擴展。base鏡像最小到10M,是不是很神奇,你見過這么精簡鏡像嘛?

新鏡像從 base 鏡像一層一層疊加生成的,每安裝一個軟件,就在現(xiàn)有鏡像的基礎上增加一層。如果多個鏡像從相同的 base 鏡像構建而來,那么 Docker Host 只需在磁盤上保存一份 base 鏡像,同時內存中也只需加載一份 base 鏡像,就可以為所有容器服務了,而且鏡像的每一層都可以被共享。

鏡像分層結構

如果多個容器共享一份基礎鏡像,當某個容器修改了基礎鏡像的內容,比如 /etc 下的文件,這時其他容器的 /etc 是否也會被修改?

這當然不行,也就產生了可寫的容器層。當容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。

可寫的容器層

鏡像的分層結構即鏡像制作過程中的操作,通過docker history 鏡像名稱即可。

了解完理論,該實踐了!

It is docker time!

下期預告“docker實踐篇“!

docker hello world!-已新鮮出爐了!

docker can run anywhere in the pod!

docker image!

docker storage!

docker cpu and memory!

docker network!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,828評論 15 147
  • 寫這篇文章主要是為了今后畢業(yè)論文素材上的整理,同時對docker進行鞏固溫習。大綱: docker簡介docker...
    胡圖仙人閱讀 7,755評論 2 96
  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,510評論 0 27
  • 生命的依托和歸宿,是冰冷絢麗的奇幻海洋——依靠想象,人魚在深海游走的畫面,甚至對于人魚如何睡覺之類的猜想,一定都是...
    影迷迷影閱讀 1,139評論 0 9
  • 深夜餃子館不只是在深夜才開張,老板娘每天早上7點就要把店里的玻璃門打開,一直到深夜3點。 在餃子館你不能隨意點單,...
    歌舒不帶刀閱讀 1,244評論 0 1

友情鏈接更多精彩內容