Docker-4 docker基本概念

Docker系統(tǒng)

Docker系統(tǒng)有兩個(gè)程序:docker服務(wù)端和docker客戶端

docker服務(wù)端:是一個(gè)服務(wù)進(jìn)程两残,管理著所有的容器型诚。也叫docker engine

docker客戶端:扮演著docker服務(wù)端的遠(yuǎn)程控制器蠕啄,可以用來控制docker的服務(wù)端進(jìn)程。

大部分情況下剖淀,docker服務(wù)端和客戶端運(yùn)行在一臺(tái)機(jī)器上 

Docker三大核心組件:

Docker 鏡像 - Docker  images 

Docker 倉庫 - Docker  registeries

Docker 容器 - Docker  containers

容器的三大組成要素:

名稱空間 namespace  容器隔離(pid,net,mnt,user,)

資源限制 cgroups  資源(內(nèi)存纯蛾,cpu)

文件系統(tǒng) overlay2(UnionFS) 

docker 倉庫:

用來保存鏡像,可以理解為代碼控制中的代碼倉庫纵隔。同樣的翻诉,Docker 倉庫也有公有和私有的概念。

公有的 Docker 倉庫名字是 Docker Hub捌刮。Docker Hub 提供了龐大的鏡像集合供使用碰煌。這些鏡像可以是自己創(chuàng)建,或者在別人的鏡像基礎(chǔ)上創(chuàng)建绅作。

倉庫(registry) -->Repository-->鏡像(按版本區(qū)分)

docker.io/centos:7
registry/repository:tag

repository:存儲(chǔ)庫


docker 國(guó)內(nèi)倉庫
ali
網(wǎng)易蜂巢
daocloud
=========================
docker公有倉庫
docker.io -------docker官方庫也叫docker-hub
類似于github一樣芦圾,面向全球的一個(gè)docker鏡像的公共倉庫。如果在國(guó)內(nèi)使用速度太慢俄认。
===============================
docker私有倉庫
個(gè)人或者公司部署的非公開庫

Docker 鏡像

? Docker 鏡像是 Docker 容器運(yùn)行時(shí)的只讀模板个少,每一個(gè)鏡像由一系列的層 (layers) 組成洪乍。Docker 使用 UnionFS 來將這些層聯(lián)合到單獨(dú)的鏡像中。正因?yàn)橛辛诉@些層的存在夜焦,Docker 是如此的輕量壳澳。當(dāng)你改變了一個(gè) Docker 鏡像,比如升級(jí)到某個(gè)程序到新的版本茫经,一個(gè)新的層會(huì)被創(chuàng)建巷波。因此,不用替換整個(gè)原先的鏡像或者重新建立(在使用虛擬機(jī)的時(shí)候你可能會(huì)這么做)卸伞,只是一個(gè)新的層被添加或升級(jí)了抹镊。

在 Docker 的術(shù)語里,一個(gè)只讀層被稱為鏡像荤傲,一個(gè)鏡像是永久不會(huì)變的垮耳。由于 Docker 使用一個(gè)統(tǒng)一文件系統(tǒng),由于鏡像不可寫遂黍,所以鏡像是無狀態(tài)的氨菇。

鏡像由三部分組成:
鏡像名稱:倉庫名稱+鏡像分類+tag名稱(鏡像版本)

1.存儲(chǔ)對(duì)象:images
2.格式:庫名/分類:tag
3.tag:表示鏡像版本

鏡像的大體分類方式:這不是規(guī)定

 1.以操作系統(tǒng)名字    
centos的docker鏡像:
centos5
centos6
centos7
-----------------
2.以應(yīng)用的名字
nginx的docker鏡像
tomcat的docker鏡像
mysql的docker鏡像

鏡像名字:

完整鏡像名稱示例:        
docker.io/library/nginx:v1
docker.io/library/nginx:latest
daocloud.io/library/nginx

鏡像ID:

所有鏡像都是通過一個(gè) 64 位十六進(jìn)制字符串來標(biāo)識(shí)的。 為簡(jiǎn)化使用妓湘,前 12 個(gè)字符可以組成一個(gè)短ID,可以在命令行中使用乌询。短ID還是有一定的碰撞機(jī)率榜贴,所以服務(wù)器總是返回長(zhǎng)ID。

鏡像ID:64位的id號(hào)妹田,一般我們看到的是12位的我們稱之為短ID唬党,只要我們每個(gè)ID號(hào)不沖突就可以了

image.png
鏡像本身:是由一層一層的鏡像合在一起的,最底層的鏡像我們稱為基礎(chǔ)鏡像鬼佣,在這個(gè)基礎(chǔ)鏡像的基礎(chǔ)上還可以在做鏡像驶拱,在做的鏡像稱為子鏡像,對(duì)于子鏡像來講在誰的基礎(chǔ)之上做的就是父鏡像晶衷。

基礎(chǔ)鏡像:一個(gè)沒有任何父鏡像的鏡像蓝纲,謂之基礎(chǔ)鏡像。
centos7   鏡像
centos7+nginx 鏡像

Docker 容器

? Docker 容器和文件夾很類似晌纫,一個(gè)Docker容器包含了所有的某個(gè)應(yīng)用運(yùn)行所需要的環(huán)境税迷。每一個(gè) Docker 容器都是從 Docker 鏡像創(chuàng)建的。Docker 容器可以運(yùn)行锹漱、開始箭养、停止、移動(dòng)和刪除哥牍。每一個(gè) Docker 容器都是獨(dú)立和安全的應(yīng)用平臺(tái)毕泌,Docker 容器是 Docker 的運(yùn)行部分喝检。

docker鏡像命名解析

Docker鏡像命名解析

鏡像是Docker最核心的技術(shù)之一,也是應(yīng)用發(fā)布的標(biāo)準(zhǔn)格式撼泛。無論你是用docker pull image挠说,或者是在

Dockerfile里面寫FROM image,從Docker官方Registry下載鏡像應(yīng)該是Docker操作里面最頻繁的動(dòng)作之一

了坎弯。那么docker鏡像是如何命名的纺涤,這也是Docker里面比較容易令人混淆的一塊概念:Registry,Repository, Tag and Image抠忘。

那么Registry又是什么呢撩炊?Registry存儲(chǔ)鏡像數(shù)據(jù),并且提供拉取和上傳鏡像的功能崎脉。Registry中鏡像是通過

Repository來組織的拧咳,而每個(gè)Repository又包含了若干個(gè)Image。

下面是在本地機(jī)器運(yùn)行docker images的輸出結(jié)果:

image.png

常說的"ubuntu"鏡像其實(shí)不是一個(gè)鏡像名稱囚灼,而是代表了一個(gè)名為ubuntu的Repository骆膝,同時(shí)在這個(gè)Repository下面有一系列打了tag的Image,Image的標(biāo)記是一個(gè)GUID灶体,為了方便也可以通過Repository:tag來引用阅签。

Image[:tag]

當(dāng)一個(gè)鏡像的名稱不足以分辨這個(gè)鏡像所代表的含義時(shí),你可以通過tag將版本信息添加到run命令中蝎抽,以執(zhí)行特

定版本的鏡像政钟。

例如:docker run ubuntu:14.04 

docker鏡像和容器的區(qū)別

一、Docker鏡像

要理解Docker鏡像和docker容器之間的區(qū)別樟结,確實(shí)不容易养交。。

一個(gè)Docker鏡像可以構(gòu)建于另一個(gè)Docker鏡像之上瓢宦,這種層疊關(guān)系可以是多層的碎连。第1層的鏡像層我們稱之為基礎(chǔ)鏡像(Base Image),其他層的鏡像(除了最頂層)我們稱之為父層鏡像(Parent Image)驮履。這些鏡像繼承了他們的父層鏡像的所有屬性和設(shè)置鱼辙。

Docker鏡像通過鏡像ID進(jìn)行識(shí)別。鏡像ID是一個(gè)64字符的十六進(jìn)制的字符串疲吸。但是當(dāng)我們運(yùn)行鏡像時(shí)座每,通常我們不會(huì)使用鏡像ID來引用鏡像,而是使用鏡像名來引用摘悴。

要列出本地所有有效的鏡像峭梳,可以使用命令

# docker images

鏡像可以發(fā)布為不同的版本,這種機(jī)制我們稱之為標(biāo)簽(Tag)。

可以使用pull命令加上指定的標(biāo)簽:

# docker pull ubuntu:14.04
# docker pull ubuntu:12.04

二葱椭、Docker容器

Docker容器可以使用命令創(chuàng)建:

# docker run  -it  imagename  /bin/bash

它會(huì)在所有的鏡像層之上增加一個(gè)可寫層捂寿。這個(gè)可寫層有運(yùn)行在CPU上的進(jìn)程,而且有兩個(gè)不同的狀態(tài):運(yùn)行態(tài)

(Running)和退出態(tài) (Exited)孵运。這就是Docker容器秦陋。當(dāng)我們使用docker run啟動(dòng)容器,Docker容器就進(jìn)

入運(yùn)行態(tài)治笨,當(dāng)我們停止Docker容器時(shí)驳概,它就進(jìn)入退出態(tài)。

當(dāng)我們有一個(gè)正在運(yùn)行的Docker容器時(shí)旷赖,從運(yùn)行態(tài)到停止態(tài)顺又,我們對(duì)它所做的一切變更都會(huì)永久地寫到容器的文

件系統(tǒng)中。要切記等孵,對(duì)容器的變更是寫入到容器的文件系統(tǒng)的稚照,而不是寫入到Docker鏡像中的。

我們可以用同一個(gè)鏡像啟動(dòng)多個(gè)Docker容器俯萌,這些容器啟動(dòng)后都是活動(dòng)的果录,彼此還是相互隔離的。我們對(duì)其中一

個(gè)容器所做的變更只會(huì)局限于那個(gè)容器本身咐熙。如果對(duì)容器的底層鏡像進(jìn)行修改弱恒,那么當(dāng)前正在運(yùn)行的容器是不受影響的,不會(huì)發(fā)生自動(dòng)更新現(xiàn)象棋恼。

名字空間--namespace

namespace  空間隔離
cgroup   資源限制

名字空間是 Linux 內(nèi)核一個(gè)強(qiáng)大的特性斤彼。每個(gè)容器都有自己?jiǎn)为?dú)的名字空間,運(yùn)行在其中的應(yīng)用都像是在獨(dú)立的操作系統(tǒng)中運(yùn)行一樣蘸泻。名字空間保證了容器之間彼此互不影響。

  1. pid 名字空間

不同用戶的進(jìn)程就是通過 pid 名字空間隔離開的嘲玫,且不同名字空間中可以有相同 pid悦施。所有的 LXC 進(jìn)程在 Docker中的父進(jìn)程為Docker進(jìn)程,每個(gè) LXC 進(jìn)程具有不同的名字空間去团。同時(shí)由于允許嵌套抡诞,因此可以很方便的實(shí)現(xiàn)嵌套的 Docker 容器。

  1. net 名字空間 ----做網(wǎng)絡(luò)接口隔離的

    有 了 pid 名字空間, 每個(gè)名字空間中的 pid 能夠相互隔離土陪,但是網(wǎng)絡(luò)端口還是共享 host 的端口昼汗。網(wǎng)絡(luò)隔離是通過 net 名字空間實(shí)現(xiàn)的, 每個(gè) net 名字空間有獨(dú)立的 網(wǎng)絡(luò)設(shè)備, IP 地址, 路由表, /proc/net 目錄鬼雀。這樣每個(gè)容器的網(wǎng)絡(luò)就能隔離開來顷窒。

  2. ipc 名字空間

容器中進(jìn)程交互還是采用了 Linux 常見的進(jìn)程間交互方法(interprocess communication - IPC), 包括信號(hào)量、消息隊(duì)列和共享內(nèi)存、socket鞋吉、管道等鸦做。

面試題:linux系統(tǒng)里面ipc通信有幾種方式

socket:網(wǎng)絡(luò)進(jìn)程間的通信
管道:本地進(jìn)程間的通信:echo  hello  | grep e
信號(hào):  kill -9 PID   這種我們叫信號(hào)量級(jí),也是本地進(jìn)程間的通信
共享內(nèi)存:每個(gè)操作系統(tǒng)里面共享內(nèi)存多大谓着,是物理內(nèi)存的一半
  1. mnt名字空間

mnt 名字空間允許不同名字空間的進(jìn)程看到的文件結(jié)構(gòu)不同泼诱,這樣每個(gè)名字空間 中的進(jìn)程所看到的文件目錄就被隔離開了。

  1. uts 名字空間

UTS("UNIX Time-sharing System") 名字空間允許每個(gè)容器擁有獨(dú)立的 hostname 和 domain name, 使其在網(wǎng)絡(luò)上可以被視作一個(gè)獨(dú)立的節(jié)點(diǎn)而非主機(jī)上的一個(gè)進(jìn)程赊锚。

  1. user 名字空間

每個(gè)容器可以有不同的用戶和組 id, 也就是說可以在容器內(nèi)用容器內(nèi)部的用戶執(zhí)行程序而非主機(jī)上的用戶治筒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舷蒲,隨后出現(xiàn)的幾起案子耸袜,更是在濱河造成了極大的恐慌,老刑警劉巖阿纤,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件句灌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡欠拾,警方通過查閱死者的電腦和手機(jī)胰锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藐窄,“玉大人资昧,你說我怎么就攤上這事【H蹋” “怎么了格带?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刹枉。 經(jīng)常有香客問我叽唱,道長(zhǎng),這世上最難降的妖魔是什么微宝? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任棺亭,我火速辦了婚禮,結(jié)果婚禮上蟋软,老公的妹妹穿的比我還像新娘镶摘。我一直安慰自己,他們只是感情好岳守,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布凄敢。 她就那樣靜靜地躺著,像睡著了一般湿痢。 火紅的嫁衣襯著肌膚如雪涝缝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音俊卤,去河邊找鬼嫩挤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛消恍,可吹牛的內(nèi)容都是我干的岂昭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼狠怨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼约啊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佣赖,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤恰矩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后憎蛤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體外傅,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年俩檬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萎胰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棚辽,死狀恐怖技竟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屈藐,我是刑警寧澤榔组,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站联逻,受9級(jí)特大地震影響搓扯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜包归,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一擅编、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箫踩,春花似錦、人聲如沸谭贪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俭识。三九已至慨削,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缚态。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工磁椒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玫芦。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓浆熔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親桥帆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子医增,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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