docker是PaaS提供商dotCloud開源的一個(gè)基于LXC的高級(jí)容器引擎恬叹,基于go語言并遵循Apache2.0協(xié)議,源碼托管于GitHub同眯。
docker解決什么問題
docker解決什么問題绽昼?容器是怎么運(yùn)行的?和虛機(jī)有什么不同须蜗?老外眼里的container是集裝箱不是中國人說的容器硅确。docker有哪些優(yōu)缺點(diǎn)?
虛機(jī)有自己的OS操作系統(tǒng)明肮,獨(dú)立于主機(jī)OS菱农,宿主型hypervisor將虛機(jī)當(dāng)作一個(gè)個(gè)進(jìn)程運(yùn)行在主機(jī)上,虛機(jī)內(nèi)核可以和主機(jī)不同柿估。
宿主型hypervisor包括開源OpenStack的kvm循未,VMware的vSphere,微軟的Hyper-V秫舌、思杰Citrix的XenServer 的妖、IBM的PowerVM烙丛、Red Hat的Enterprise Virtulization、華為的FusionSphere羔味,中興的TECS KVM河咽。
裸機(jī)型hypervisor本文先不介紹。
容器之間共享主機(jī)的OS操作系統(tǒng)赋元,容器引擎將容器當(dāng)作一個(gè)個(gè)進(jìn)程運(yùn)行在主機(jī)上忘蟹,虛機(jī)內(nèi)核是使用的主機(jī)內(nèi)核,因此依賴于主機(jī)內(nèi)核版本搁凸,且不便于升級(jí)媚值。
容器引擎包括docker,CoreOS的rkt和Mesos的Mesos containerizer护糖。當(dāng)然主流還是docker褥芒。
容器運(yùn)行在host操作系統(tǒng)的用戶空間,與操作系統(tǒng)其他進(jìn)程隔離嫡良。在容器啟動(dòng)時(shí)不需要啟動(dòng)內(nèi)核空間锰扶,所以啟動(dòng)時(shí)比虛機(jī)較快,開銷少寝受,易遷移坷牛。
對(duì)比完虛機(jī)和容器的不同,我們還是回到主咖docker來介紹很澄。
Docker 將集裝箱思想(分類管理貨物京闰,不受運(yùn)輸時(shí)外界帶來的損壞)運(yùn)用到軟件打包(容器特性build onece can run anywhere意味著環(huán)境隔離,運(yùn)行一次后打包可在其他環(huán)境上運(yùn)行)上甩苛,為代碼提供了一個(gè)基于容器的標(biāo)準(zhǔn)化運(yùn)輸系統(tǒng)蹂楣。
docker并不是全能的,局限在于無法在33位的Windows/Linux環(huán)境下使用讯蒲,基于Linux 64位的痊土。cgroup的CPU和CPUset提供的CPU功能相比KVM等虛擬化方案難以度量(dotCloud主要按照內(nèi)存收費(fèi)),docker對(duì)磁盤管理能力有限爱葵,container隨著用戶進(jìn)程的停止銷毀導(dǎo)致用戶log不便收集施戴。docker網(wǎng)絡(luò)管理簡(jiǎn)單,主要是基于namespace隔離萌丈。
docker架構(gòu)篇
docker架構(gòu)篇Docker 采用的是 Client/Server 架構(gòu)赞哗,包含client,docker daemon服務(wù)端辆雾,image鏡像肪笋,registry軟件倉庫,docker container共5部分√僖遥客戶端向服務(wù)器發(fā)送請(qǐng)求猜揪,服務(wù)器負(fù)責(zé)構(gòu)建、運(yùn)行和分發(fā)容器坛梁《悖客戶端和服務(wù)器可以運(yùn)行在同一個(gè) Host 上,客戶端也可以通過 socket 或 REST API 與遠(yuǎn)程的服務(wù)器通信划咐。
docker鏡像篇
docker如何構(gòu)建鏡像什么是base鏡像拴念?Linux系統(tǒng)包含內(nèi)核空間kernel和用戶空間rootfs兩部分,容器只使用各自的rootfs但共用host的kernel褐缠,這就產(chǎn)生鏡像結(jié)構(gòu)分成政鼠,但為何產(chǎn)生鏡像結(jié)構(gòu)分層?如何查查看鏡像分層結(jié)構(gòu)队魏?
所有容器都共用 host 的 kernel公般,在容器中沒辦法對(duì) kernel 升級(jí)。
base 鏡像有兩層含義:不依賴其他鏡像胡桨,從 scratch 構(gòu)建官帘。其他鏡像可以之為基礎(chǔ)進(jìn)行擴(kuò)展。base鏡像最小到10M登失,是不是很神奇遏佣,你見過這么精簡(jiǎn)鏡像嘛?
新鏡像從 base 鏡像一層一層疊加生成的揽浙,每安裝一個(gè)軟件,就在現(xiàn)有鏡像的基礎(chǔ)上增加一層意敛。如果多個(gè)鏡像從相同的 base 鏡像構(gòu)建而來馅巷,那么 Docker Host 只需在磁盤上保存一份 base 鏡像,同時(shí)內(nèi)存中也只需加載一份 base 鏡像草姻,就可以為所有容器服務(wù)了钓猬,而且鏡像的每一層都可以被共享。
如果多個(gè)容器共享一份基礎(chǔ)鏡像撩独,當(dāng)某個(gè)容器修改了基礎(chǔ)鏡像的內(nèi)容敞曹,比如 /etc 下的文件,這時(shí)其他容器的 /etc 是否也會(huì)被修改综膀?
這當(dāng)然不行澳迫,也就產(chǎn)生了可寫的容器層。當(dāng)容器啟動(dòng)時(shí)剧劝,一個(gè)新的可寫層被加載到鏡像的頂部橄登。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。
鏡像的分層結(jié)構(gòu)即鏡像制作過程中的操作拢锹,通過docker history 鏡像名稱即可谣妻。
了解完理論,該實(shí)踐了卒稳!
It is docker time!
下期預(yù)告“docker實(shí)踐篇“!
docker hello world蹋半!-已新鮮出爐了!
docker can run anywhere in the pod!
docker image!
docker storage!
docker cpu and memory!
docker network!