2017-12-30

PaaS:平臺即服務厅各。
DevOps(英文Development和Operations的組合)

Docker 容器引擎 基于 LXC 基于go語言 遵從Apache2.0協(xié)議開源蚁孔。托管在 Github 上
Docker 使用客戶端-服務器 (C/S) 架構模式凿掂,使用遠程API來管理,通過鏡像來創(chuàng)建Docker容器犯祠。

應用以及依賴包=>容器(沙箱)
作為sandbox大概是container的最基本想法了: 輕量級的隔離機制, 快速重建和銷毀, 占用資源少。

用docker在開發(fā)者的單機環(huán)境下模擬分布式軟件部署和調試祭犯,可謂又快又好墓懂。
同時docker提供的版本控制和image機制以及遠程image管理忱辅,可以構建類似git的分布式開發(fā)環(huán)境。
Docker已經(jīng)不僅僅是DevOps人員手中的神器了谭溉,每一個開發(fā)者都應該學會如何使用Docker墙懂。[14]

交付運行環(huán)境..海運,OS..貨輪,軟件..集裝箱,
交付一個軟件,就是一系列標準化組件的集合的交付扮念,如同樂高積木

Docker daemon 作為服務端接受來自客戶的請求损搬,并處理這些請求(創(chuàng)建、運行柜与、分發(fā)容器)巧勤。一般在宿主主機后臺運行,等待接收來自客戶端的消息弄匕。

docker能夠只加載每個container變化的部分颅悉,這樣資源占用小,能夠在單機環(huán)境下與KVM之類的虛擬化方案相比能夠更加快速和占用更少資源
** LXC是基于cgroup等linux kernel功能的迁匠,因此container的guest系統(tǒng)只能是linux base的
*** LXC 是一個操作系統(tǒng)級虛擬化方法
*** 用戶的進程是lxc-start進程的子進程, 只是在Kernel的namespace中隔離的,
***** 隔離性 - 每個用戶實例之間相互隔離, 互不影響剩瓶。 硬件虛擬化方法給出的方法是VM, LXC給出的方法是container,更細一點是kernel namespace
***** 可配額/可度量 - 每個用戶實例可以按需提供其計算資源柒瓣,所使用的資源可以被計量儒搭。硬件虛擬化方法因為虛擬了CPU, memory可以方便實現(xiàn), LXC則主要是利用cgroups來控制資源
移動性 - 用戶的實例可以很方便地復制、移動和重建芙贫。硬件虛擬化方法提供snapshot和image來實現(xiàn)搂鲫,docker(主要)利用AUFS實現(xiàn)

Control Groups cgroups 實現(xiàn)了對資源的配額和度量。 cgroups 的使用非常簡單磺平,提供類似文件的接口魂仍,
在 /cgroup目錄下新建一個文件夾即可新建一個group,在此文件夾中新建task文件拣挪,并將pid寫入該文件擦酌,即可實現(xiàn)對該進程的資源控制。
具體的資源配置選項可以在該文件夾中新建子 subsystem 菠劝,{子系統(tǒng)前綴}.{資源項} 是典型的配置方法赊舶,
如memory.usage_in_bytes 就定義了該group 在subsystem memory中的一個內存限制選項。
另外赶诊,cgroups中的 subsystem可以隨意組合笼平,一個subsystem可以在不同的group中,也可以一個group包含多個subsystem - 也就是說一個 subsystem舔痪。

我們主要關心cgroups可以限制哪些資源寓调,即有哪些subsystem是我們關心。
cpu : 在cgroup中锄码,并不能像硬件虛擬化方案一樣能夠定義CPU能力夺英,但是能夠定義CPU輪轉的優(yōu)先級晌涕,因此具有較高CPU優(yōu)先級的進程會更可能得到CPU運算。
  通過將參數(shù)寫入cpu.shares,即可定義改cgroup的CPU優(yōu)先級 - 這里是一個相對權重痛悯,而非絕對值余黎。當然在cpu這個subsystem中還有其他可配置項,手冊中有詳細說明载萌。
cpusets : cpusets 定義了有幾個CPU可以被這個group使用驯耻,或者哪幾個CPU可以供這個group使用。在某些場景下炒考,單CPU綁定可以防止多核間緩存切換可缚,從而提高效率
memory : 內存相關的限制
blkio : block IO相關的統(tǒng)計和限制,byte/operation統(tǒng)計和限制(IOPS等)斋枢,讀寫速度限制等帘靡,但是這里主要統(tǒng)計的都是同步IO
net_cls, cpuacct , devices , freezer 等其他可管理項瓤帚。
LXC的虛擬化方法的IO和CPU性能幾乎接近 baremetal 的性能

典型的Linux啟動到運行需要兩個FS - bootfs + rootfs (從功能角度而非文件系統(tǒng)角度)(圖1)
bootfs (boot file system) 主要包含 bootloader 和 kernel, bootloader主要是引導加載kernel, 當boot成功后 kernel 被加載到內存中后 bootfs就被umount了.
rootfs (root file system) 包含的就是典型 Linux 系統(tǒng)中的 /dev, /proc, /bin, /etc 等標準目錄和文件描姚。
由此可見對于不同的linux發(fā)行版, bootfs基本是一致的, rootfs會有差別, 因此不同的發(fā)行版可以公用bootfs 如下(圖2):

典型的Linux在啟動后,首先將 rootfs 置為 readonly, 進行一系列檢查, 然后將其切換為 “readwrite” 供用戶使用戈次。
在docker中轩勘,起初也是將 rootfs 以readonly方式加載并檢查,然而接下來利用 union mount 的將一個 readwrite 文件系統(tǒng)掛載在 readonly 的rootfs之上怯邪,
并且允許再次將下層的 file system設定為readonly 并且向上疊加, 這樣一組readonly和一個writeable的結構構成一個container的運行目錄, 每一個被稱作一個Layer绊寻。如下(圖3):
得益于AUFS的特性, 每一個對readonly層文件/目錄的修改都只會存在于上層的writeable層中。這樣由于不存在競爭, 多個container可以共享readonly的layer悬秉。
所以docker將readonly的層稱作 “image” - 對于container而言整個rootfs都是read-write的澄步,但事實上所有的修改都寫入最上層的writeable層中,
image不保存用戶狀態(tài),可以用于模板和泌、重建和復制村缸。

步驟1:
分解。一般來說武氓,應用程序都是復雜的梯皿,它們都有很多的組件。例如县恕,大多數(shù)應用程序都需要數(shù)據(jù)庫或中間件服務的支持以實現(xiàn)對數(shù)據(jù)的存儲东羹、檢索和集成。
所以弱睦,需要通過設計和部署把這些服務拆分成為它們自己的容器百姓。如果一個應用程序能夠被拆分成為越多的分布式組件渊额,那么應用程序擴展的選擇則越多况木。
但是垒拢,"分布式組件"越多也意味著管理的復雜性越高。

步驟2:
選擇基礎映像火惊。當執(zhí)行應用程序遷移時求类,應盡量避免推倒重來的做法。搜索Docker注冊庫找到一個基本的Docker映像并將其作為應用程序的基礎來使用屹耐。
隨著時間的推移尸疆,企業(yè)將會發(fā)現(xiàn)這些Docker注冊庫中基本映像的價值所在。請記住惶岭,Docker支持著一個Docker開發(fā)人員社區(qū)寿弱,所以項目的成功與否很大程度上取決于用戶對于映像管理和改良的參與度。

步驟3:
基于容器的應用程序是分布式應用程序按灶。
為每一個應用程序組件和數(shù)據(jù)提供一個唯一的標識符
企業(yè)用戶還應當增加一個日志記錄的方法症革。

步驟4:
增加代碼。為了創(chuàng)建鏡像鸯旁,企業(yè)用戶需要使用一個Dockerfile來定義映像開發(fā)的必要步驟噪矛。一旦創(chuàng)建了映像,企業(yè)用戶就應將其添加至Docker Hub铺罢。
步驟5:
配置測試部署艇挨。應對在容器中運行的應用程序進行配置,以便于讓應用程序知道可以在哪里連接外部資源或者應用程序集群中的其他容器韭赘。
企業(yè)用戶可以把這些配置部署在容器中或使用環(huán)境變量缩滨。

*** 對基于容器的應用程序進行測試類似于對其他分布式應用程序的測試。
企業(yè)可以對每個容器進行組件測試泉瞻,并將容器集群作為一個整體進行測試楷怒。
確定應用程序應如何能夠在負載增加的情況下進行擴展。如果用戶正在使用一個集群管理器(例如Swarm)瓦灶,則可測試其性能鸠删。
最后,把容器部署到實際生產(chǎn)環(huán)境中贼陶。為了積極主動地關注基于容器的應用程序的運行狀況刃泡,可考慮實施必要的監(jiān)控和管理機制 。確保打開日志記錄功能碉怔。
很多應用程序遷移至云計算都是采用容器技術的烘贴。雖然遷移有一點復雜,但是容器可以保護應用程序投資并賦予了它一個更長的使用壽命撮胧。

1.Docker鏡像   
CPU使用率:
 docker run -it --rm --cpuset=0,1 -c 2 ...
 內存使用:
 docker run -it --rm -m 128m ...
 存儲使用:
 docker -d --storage-opt dm.basesize=5G

2.用戶命名空間   
  Docker不支持用戶的命名空間桨踪,但是目前的一個開發(fā)[13]功能。
**** 該功能將允許Docker程序像一個沒有特權的用戶在主機上運行芹啥,但顯示出來的是和在容器中運行的一樣锻离。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末铺峭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子汽纠,更是在濱河造成了極大的恐慌卫键,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱朵,死亡現(xiàn)場離奇詭異莉炉,居然都是意外死亡,警方通過查閱死者的電腦和手機碴犬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門絮宁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人服协,你說我怎么就攤上這事羞福。” “怎么了蚯涮?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵治专,是天一觀的道長。 經(jīng)常有香客問我遭顶,道長张峰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任棒旗,我火速辦了婚禮喘批,結果婚禮上,老公的妹妹穿的比我還像新娘铣揉。我一直安慰自己饶深,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布逛拱。 她就那樣靜靜地躺著敌厘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朽合。 梳的紋絲不亂的頭發(fā)上俱两,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音曹步,去河邊找鬼宪彩。 笑死,一個胖子當著我的面吹牛讲婚,可吹牛的內容都是我干的尿孔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼活合!你這毒婦竟也來了雏婶?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芜辕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后块差,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侵续,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年憨闰,在試婚紗的時候發(fā)現(xiàn)自己被綠了状蜗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹉动,死狀恐怖轧坎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情泽示,我是刑警寧澤缸血,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站械筛,受9級特大地震影響捎泻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜埋哟,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一笆豁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赤赊,春花似錦闯狱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吹截,卻和暖如春录豺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饭弓。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工双饥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弟断。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓咏花,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昏翰,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容