Docker原理及命令

Docker出現(xiàn)

Docker 是一個開源項目,誕生于 2013 年初颅湘,最初是 dotCloud 公司內(nèi)部的一個業(yè)余項目。它基于 Google 公司推出的 Go 語言實現(xiàn)。

Docker 項目的目標是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案察署。 Docker 的基礎是 Linux 容器(LXC)等技術(shù)。在 LXC 的基礎上 Docker 進行了進一步的封裝峻汉,讓用戶不需要去關心容器的管理贴汪,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單休吠。

可見容器DOCKER是在操作系統(tǒng)層面上實現(xiàn)虛擬化扳埂,直接復用本地主機的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實現(xiàn)瘤礁。

Docker 的出現(xiàn)是因為目前的后端在開發(fā)和運維階段確實需要一種虛擬化技術(shù)解決開發(fā)環(huán)境和生產(chǎn)環(huán)境環(huán)境一致的問題阳懂,通過 Docker 我們可以將程序運行的環(huán)境也納入到版本控制中,排除因為環(huán)境造成不同運行結(jié)果的可能。

Docker基于Linux四種技術(shù)實現(xiàn):
  • Linux容器技術(shù)(LXC)
    Docker在LXC基礎上完善了自己的控制策略和共享策略岩调。
  • Namespace
    命名空間是 Linux 內(nèi)核一個強大的特性巷燥。每個容器都有自己單獨的命名空間,運行在其中的應用都像是在獨立的操作系統(tǒng)中運行一樣号枕。
  • Cgroup(控制組)
    Linux 內(nèi)核的一個特性缰揪,主要用來對共享資源進行隔離击奶、限制抖格、審計等。只有能控制分配到容器的資源耘成,才能避免當多個容器同時運行時的對系統(tǒng)資源的競爭赞厕。
  • UnionFS(聯(lián)合文件系統(tǒng))
    Union文件系統(tǒng)(UnionFS)是一種分層拍屑、輕量級并且高性能的文件系統(tǒng),它支持對 文件系統(tǒng)的修改作為一次提交來一層層的疊加坑傅,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下僵驰。Union 文件系統(tǒng)是 Docker 鏡像的基礎。鏡像可以通過分層來進行繼承唁毒,基于基礎鏡像(沒有父鏡像)蒜茴,可以制作各種具體的應用鏡像。另外浆西,不同 Docker 容器就可以共享一些基礎的文件系統(tǒng)層粉私,同時再加上自己獨有的改動層,大大提高了存儲的效率近零。

Docker工作原理 參考

掌握一門技術(shù)并合理使用它的最好辦法就是深入理解這項技術(shù)背后的工作原理
深入理解Docker的命令诺核,還有容器(container)和鏡像(image)之間的區(qū)別,并深入探討容器和運行中的容器之間的區(qū)別,才能更好的運用docker久信。

Image Definition

鏡像(Image)就是一堆只讀層(read-only layer)的統(tǒng)一視角窖杀,也許這個定義有些難以理解,下面的這張圖能夠幫助讀者理解鏡像的定義裙士。


圖片.png

從左邊我們看到了多個只讀層入客,它們重疊在一起。除了最下面一層腿椎,其它層都會有一個指針指向下一層桌硫。這些層是Docker內(nèi)部的實現(xiàn)細節(jié),并且能夠在主機(譯者注:運行Docker的機器)的文件系統(tǒng)上訪問到啃炸。統(tǒng)一文件系統(tǒng)(union file system)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€文件系統(tǒng)铆隘,為這些層提供了一個統(tǒng)一的視角,這樣就隱藏了多層的存在南用,在用戶的角度看來膀钠,只存在一個文件系統(tǒng)掏湾。我們可以在圖片的右邊看到這個視角的形式。

  • 從封裝的角度上來看, 鏡像=操作系統(tǒng)+軟件運行環(huán)境+用戶程序
Container Definition

容器(container)的定義和鏡像(image)幾乎一模一樣托修,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的恒界。


圖片.png

要點:容器 = 鏡像 + 讀寫層睦刃。
然而, 容器的運行態(tài)又衍生了不同的概念。

Running Container Definition

一個運行態(tài)容器(running container)被定義為一個可讀寫的統(tǒng)一文件系統(tǒng)加上隔離的進程空間和包含其中的進程十酣。下面這張圖片展示了一個運行中的容器涩拙。


圖片.png

正是文件系統(tǒng)隔離技術(shù)使得Docker成為了一個前途無量的技術(shù)。一個容器中的進程(Process)可能會對文件進行修改耸采、刪除兴泥、創(chuàng)建,這些改變都將作用于可讀寫層(read-write layer),對實際主機的文件系統(tǒng)產(chǎn)生影響虾宇。


全局理解(Tying It All Together)

圖片.png

現(xiàn)在搓彻,讓我們結(jié)合上面提到的實現(xiàn)細節(jié)來理解Docker的命令:

docker create <image-id>
docker create 命令為指定的鏡像(image)添加了一個可讀寫層,構(gòu)成了一個新的容器嘱朽。注意旭贬,這個容器并沒有運行。

docker start <container-id>
Docker start命令為容器文件系統(tǒng)創(chuàng)建了一個進程隔離空間搪泳。注意稀轨,每一個容器只能夠有一個進程隔離空間。

docker run <image-id>
docker run就是docker create和docker start兩個命令的組合岸军。

docker ps
docker ps 命令會列出所有運行中的容器奋刽。這隱藏了非運行態(tài)容器的存在,如果想要找出這些容器艰赞,我們需要使用下面這個命令佣谐。

docker ps –a
docker ps 命令會列出所有容器,無關狀態(tài)。

docker images
docker images命令會列出了所有頂層(top-level)鏡像方妖。實際上台谍,在這里我們沒有辦法區(qū)分一個鏡像和一個只讀層,所以我們提出了top-level鏡像吁断。只有創(chuàng)建容器時使用的鏡像或者是直接pull下來的鏡像能被稱為頂層(top-level)鏡像趁蕊,并且每一個頂層鏡像下面都隱藏了多個鏡像層。

docker images –a
docker images命令會列出了所有層次的鏡像
docker stop <container-id>
暫停運行中的容器

docker rm <container-id>
docker rm命令會移除構(gòu)成容器的可讀寫層仔役。注意掷伙,這個命令只能對非運行態(tài)容器執(zhí)行。

docker save <image-id>
docker save命令會創(chuàng)建一個鏡像的壓縮文件又兵,這個文件能夠在另外一個主機的Docker上使用任柜。和export命令不同卒废,這個命令為每一個層都保存了它們的元數(shù)據(jù)。這個命令只能對鏡像生效宙地。

docker tag <image-id> [image name]:[new tag]
為鏡像指定新的標簽


docker鏡像初級共享

docker save <image-id>命令會在當前目錄下生成導出文件xxx.tar摔认,然后將此文件下載到本地。
docker load [OPTIONS] 從tar歸檔文件讀取鏡像

共享命令的區(qū)別:

docker save images_name:將一個鏡像導出為文件宅粥,再使用docker load命令將文件導入為一個鏡像参袱,會保存該鏡像的的所有歷史記錄。比docker export命令導出的文件大秽梅,很好理解抹蚀,因為會保存鏡像的所有歷史記錄。
docker export container_id:將一個容器導出為文件企垦,再使用docker import命令將容器導入成為一個新的鏡像环壤,但是相比docker save命令,容器文件會丟失所有元數(shù)據(jù)和歷史記錄钞诡,僅保存容器當時的狀態(tài)郑现,相當于虛擬機快照

想要實現(xiàn)更高級的共享策略則需要引入倉庫的概念, 參考我另一篇文章: 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荧降,隨后出現(xiàn)的幾起案子懂酱,更是在濱河造成了極大的恐慌,老刑警劉巖誊抛,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件列牺,死亡現(xiàn)場離奇詭異,居然都是意外死亡拗窃,警方通過查閱死者的電腦和手機瞎领,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來随夸,“玉大人九默,你說我怎么就攤上這事”龆荆” “怎么了驼修?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诈铛。 經(jīng)常有香客問我乙各,道長,這世上最難降的妖魔是什么幢竹? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任耳峦,我火速辦了婚禮,結(jié)果婚禮上焕毫,老公的妹妹穿的比我還像新娘蹲坷。我一直安慰自己驶乾,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布循签。 她就那樣靜靜地躺著级乐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪县匠。 梳的紋絲不亂的頭發(fā)上风科,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音聚唐,去河邊找鬼丐重。 笑死腔召,一個胖子當著我的面吹牛杆查,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臀蛛,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼亲桦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浊仆?” 一聲冷哼從身側(cè)響起客峭,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抡柿,沒想到半個月后舔琅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡洲劣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年备蚓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囱稽。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡郊尝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出战惊,到底是詐尸還是另有隱情流昏,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布吞获,位于F島的核電站况凉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏各拷。R本人自食惡果不足惜茎刚,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撤逢。 院中可真熱鬧膛锭,春花似錦粮坞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奢入,卻和暖如春筝闹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腥光。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工关顷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人武福。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓议双,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捉片。 傳聞我的和親對象是個殘疾皇子平痰,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,389評論 0 27
  • docker常用命令原理圖概覽: 按照docker官網(wǎng)上的說法伍纫,docker的文件系統(tǒng)分為兩層:bootfs和ro...
    燕京博士閱讀 2,964評論 2 32
  • 特別說明: 本人平時混跡于 B 站宗雇,不咋回復這里的評論,有問題可以到 B 站視頻評論區(qū)留言找我視頻地址: http...
    擼帝閱讀 868評論 1 3
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,752評論 1 21
  • 標簽(空格分隔): Yii2 AdminLTE 是一個完全響應管理模板莹规∨馄眩基于 Bootstrap3 框架,易定制模...
    ahcj_11閱讀 5,033評論 0 2