Docker入門學習筆記

什么是Docker

Docker官方:

An open source project to package, ship and run any application as lightweight container.一個開源的可以滿足任何應用程序以一種輕量級的容器進行打包、發(fā)布、運行的項目.

Node.js給Docker的定義:

Allow to package an application with all of its dependencies into a standardized unit.允許將應用和其所有依賴以一種標準的單元進行打包.

簡單類比:

一個輕量級的虛擬機.

Docker和虛擬機的區(qū)別是:虛擬機通過Hypervisor層在宿主上虛擬出來計算機的硬件(CPU拥褂、內存遮晚、網(wǎng)卡等),然后在上面運行完整的操作系統(tǒng),在操作系統(tǒng)上在運行相關的中間件依賴和Application.而Docker就要輕量級的多,直接在宿主的上通過Docker Engine層直接就可以運行依賴和Application本身.

屏幕快照 2018-04-10 上午9.57.24 2.png

Docker架構

屏幕快照 2018-04-09 下午3.26.11.png

如圖,介紹架構中的概念:

  • DOCKER_HOST:宿主機器,也就是我們的服務器、臺式機或者筆記本的系統(tǒng).
  • Docker daemon:守護進程,也就是Docker的主進程.提供給客戶端進行命令執(zhí)行,然后與鏡像曾掂、容器和鏡像倉庫進行交互.
  • Client:客戶端,也就是我們的命令行工具,執(zhí)行容器的相關命令.
  • Images:鏡像,我們可以把鏡像比喻為未啟動的程序的源代碼,所以鏡像的體積并不大,只會占用少量的磁盤空間.
  • Containers:容器,容器就好比是源代碼執(zhí)行后產(chǎn)生的實體類,也就是運行中的程序,同一個鏡像可以產(chǎn)生多個容器,就好比是一個實體類被實例話了多次.當然每個產(chǎn)生的容器可以根據(jù)啟動時的配置不同而不同,比如端口、數(shù)據(jù)庫連接等.多個同一鏡像產(chǎn)生的容器可能會存在相關的共享只讀資源,這樣可以減少很大的內存開銷,就類似于程序代碼中的靜態(tài)類可以被每個實例使用.
  • Registry: 鏡像倉庫,我們Docker本山是沒有任何鏡像的,可通過客戶端執(zhí)行命令在鏡像倉庫中查找我們需要的鏡像,比如mysql數(shù)據(jù)庫、nginx等,然后將倉庫中的鏡像pull到本地的Docker中,同樣我們也可以將我們制作的鏡像發(fā)不到遠程倉庫供我們以后使用或者分享給他人使用.

Docker基礎命令

屏幕快照 2018-04-10 上午10.42.36.png
屏幕快照 2018-04-10 上午10.43.03.png

Dockerfile(鏡像定義配置)

Dockerfile 是一個包含創(chuàng)建鏡像所有命令的文本文件委煤,通過docker build命令可以根據(jù) Dockerfile 的內容構建鏡像.基本命令如下:

  • FROM
  • MAINTAINER
  • RUN
  • CMD
  • EXPOSE
  • ENV
  • ADD
  • COPY
  • ENTRYPOINT
  • VOLUME
  • USER
  • WORKDIR
  • ONBUILD

Volume(數(shù)據(jù)持久化卷宗配置)

提供獨立于容器之外的持久化存儲,在容器中的相關修改和操作是不會被存儲的,當容器銷毀之后所有的數(shù)據(jù)不會被保存.

Docker的鏡像是由一系列的只讀層組合而來,當啟動一個容器的時候修档,Docker加載鏡像的所有只讀層碧绞,并在最上層加入一個讀寫層。這個設計使得Docker可以提高鏡像構建吱窝、存儲和分發(fā)的效率讥邻,節(jié)省了時間和存儲空間,然而也存在如下問題院峡。

  • 容器中的文件在宿主機上存在形式復雜兴使,不能在宿主機上很方便的對容器中的文件進行訪問

  • 多個容器之間的數(shù)據(jù)無法共享

  • 當刪除容器時,容器產(chǎn)生的數(shù)據(jù)將丟失

    為了解決這些問題撕予,Docker引入了數(shù)據(jù)卷(volume)機制鲫惶。volume是存在一個或多個容器中的特定文件或文件夾,這個目錄能夠獨立于聯(lián)合文件系統(tǒng)的形式在宿主機中存在实抡,并為數(shù)據(jù)的共享與持久提供一下便利欠母。

  • volume在容器創(chuàng)建時就初始化,在容器運行時就可以使用其中的文件

  • volume能在不同的容器之間共享和重用

  • 對volume中的數(shù)據(jù)的操作會馬上生效

  • 對volume中數(shù)據(jù)操作不會影響到鏡像本身

  • volume的生存周期獨立于容器的生存周期吆寨,即使刪除容器赏淌,volume仍然會存在,沒有任何容器使用的volume也不會被Docker刪除

Docker Compose(運行時容器啟動配置)

假設我們有一個比較復雜的應用程序,在Docker中運行,會需要用到mysql啄清、Redis六水、nginx等等多個容器,而且每個容器之間又存在訪問交互,這個時候就需要一個配置將他們運行時連接起來.

Docker Compose是一個用來定義和運行復雜應用的Docker工具。一個使用Docker容器的應用,通常由多個容器組成掷贾。使用Docker Compose不再需要使用shell腳本來啟動容器睛榄。
Compose 通過一個配置文件來管理多個Docker容器,在配置文件中想帅,所有的容器通過services來定義场靴,然后使用docker-compose腳本來啟動,停止和重啟應用港准,和應用中的服務以及所有依賴服務的容器旨剥,非常適合組合使用多個容器進行開發(fā)的場景。

為什么要使用 Docker浅缸?

Docker 跟傳統(tǒng)的虛擬化方式相比具有以下優(yōu)勢:

更高效的利用系統(tǒng)資源

由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷轨帜,Docker 對系統(tǒng)資源的利用率更高。無論是應用執(zhí)行速度衩椒、內存損耗或者文件存儲速度蚌父,都要比傳統(tǒng)虛擬機技術更高效。因此烟具,相比虛擬機技術梢什,一個相同配置的主機,往往可以運行更多數(shù)量的應用朝聋。

更快速的啟動時間

傳統(tǒng)的虛擬機技術啟動應用服務往往需要數(shù)分鐘嗡午,而 Docker 容器應用,由于直接運行于宿主內核冀痕,無需啟動完整的操作系統(tǒng)荔睹,因此可以做到秒級、甚至毫秒級的啟動時間言蛇。大大的節(jié)約了開發(fā)僻他、測試、部署的時間腊尚。

一致的運行環(huán)境

開發(fā)過程中一個常見的問題是環(huán)境一致性問題吨拗。由于開發(fā)環(huán)境、測試環(huán)境婿斥、生產(chǎn)環(huán)境不一致劝篷,導致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內核外完整的運行時環(huán)境民宿,確保了應用運行環(huán)境一致性娇妓,從而不會再出現(xiàn) “這段代碼在我機器上沒問題啊” 這類問題。

持續(xù)交付和部署

對開發(fā)和運維人員來說活鹰,最希望的就是一次創(chuàng)建或配置哈恰,可以在任意地方正常運行只估。

使用 Docker 可以通過定制應用鏡像來實現(xiàn)持續(xù)集成、持續(xù)交付着绷、部署蛔钙。開發(fā)人員可以通過 Dockerfile 來進行鏡像構建,并結合 持續(xù)集成系統(tǒng)進行集成測試蓬戚,而運維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像夸楣,甚至結合持續(xù)部署系統(tǒng)進行自動部署宾抓。

而且使用 Dockerfile 使鏡像構建透明化子漩,不僅僅開發(fā)團隊可以理解應用運行環(huán)境,也方便運維團隊理解應用運行所需條件石洗,幫助更好的生產(chǎn)環(huán)境中部署該鏡像幢泼。

更輕松的遷移

由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應用的遷移更加容易讲衫。Docker 可以在很多平臺上運行缕棵,無論是物理機、虛擬機涉兽、公有云招驴、私有云,甚至是筆記本枷畏,其運行結果是一致的别厘。因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上拥诡,而不用擔心運行環(huán)境的變化導致應用無法正常運行的情況触趴。

更輕松的維護和擴展

Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易渴肉,也使得應用的維護更新更加簡單冗懦,基于基礎鏡像進一步擴展鏡像也變得非常簡單。此外仇祭,Docker 團隊同各個開源項目團隊一起維護了一大批高質量的官方鏡像披蕉,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎進一步定制乌奇,大大的降低了應用服務的鏡像制作成本没讲。

對比傳統(tǒng)虛擬機總結

6171922-b5c9affca9e877da.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市华弓,隨后出現(xiàn)的幾起案子食零,更是在濱河造成了極大的恐慌,老刑警劉巖寂屏,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贰谣,死亡現(xiàn)場離奇詭異娜搂,居然都是意外死亡,警方通過查閱死者的電腦和手機吱抚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門百宇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秘豹,你說我怎么就攤上這事携御。” “怎么了既绕?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵啄刹,是天一觀的道長。 經(jīng)常有香客問我凄贩,道長誓军,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任疲扎,我火速辦了婚禮昵时,結果婚禮上,老公的妹妹穿的比我還像新娘椒丧。我一直安慰自己壹甥,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布壶熏。 她就那樣靜靜地躺著句柠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪久橙。 梳的紋絲不亂的頭發(fā)上俄占,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音淆衷,去河邊找鬼缸榄。 笑死,一個胖子當著我的面吹牛祝拯,可吹牛的內容都是我干的甚带。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼佳头,長吁一口氣:“原來是場噩夢啊……” “哼鹰贵!你這毒婦竟也來了?” 一聲冷哼從身側響起康嘉,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碉输,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亭珍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敷钾,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡枝哄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阻荒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挠锥。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侨赡,靈堂內的尸體忽然破棺而出蓖租,到底是詐尸還是另有隱情,我是刑警寧澤羊壹,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布蓖宦,位于F島的核電站,受9級特大地震影響舶掖,放射性物質發(fā)生泄漏球昨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一眨攘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嚣州,春花似錦鲫售、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匀哄,卻和暖如春秦效,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涎嚼。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工阱州, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人法梯。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓苔货,卻偏偏與公主長得像,于是被迫代替她去往敵國和親立哑。 傳聞我的和親對象是個殘疾皇子夜惭,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容