国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Docker 存儲驅(qū)動詳細介紹

Docker 存儲驅(qū)動詳細介紹

2020-06-28 11:23java教程網(wǎng) JAVA教程

這篇文章主要介紹了Docker 存儲驅(qū)動詳細介紹的相關資料,需要的朋友可以參考下

Docker 存儲驅(qū)動詳細介紹

最近做項目,期間對Docker 存儲驅(qū)動不會,于是在網(wǎng)上找資料,并解決了,這里就記錄下。

目的

  1. 理解docker的存儲方式
  2. docker的image和container在host上的目錄結(jié)構(gòu)
  3. docker image和container的內(nèi)容與配置不同存儲

Docker是一個開源的應用容器引擎,主要利用Linux內(nèi)核namespace實現(xiàn)沙盒隔離,用Cgroup實現(xiàn)資源限制。Docker用于統(tǒng)一開發(fā)和部署的輕量級 Linux 容器,試圖解決“依賴地獄”問題,把依賴的服務和組件組合起來,類似船舶使用的集裝箱,達到快速安裝部署。

1. Docker的基本架構(gòu)—Client和Daemon

讓我們先搞明白docker的基本架構(gòu)和啟動過程,其實Docker 采用了C/S架構(gòu),包括客戶端和服務端。Docker daemon作為服務端接受來自客戶的請求,并處理這些請求(創(chuàng)建、運行、提交容器)。 客戶端和服務端在一個機器上,通過RESTful API 來進行通信。 具體到使用的過程中,就是在執(zhí)行 service docker start 后,在主機(host)上產(chǎn)生docker deamon守護進程,在后臺運行并等待接收來自客戶端的消息(即輸入的docker命令,如 docker pull xxx,docker run …,docker commit xxx ),實現(xiàn)跟docker deamon的交互。當啟動docker服務后,可以看到docker進程。

Default

?
1
2
3
[root@localhost ~]# ps -aux | grep docker
root  11701 0.0 0.4 359208 16624 ?  Ssl 21:05 0:00 /usr/bin/docker -d -H fd:// --selinux-enabled --insecure-registry 186.100.8.216:5000
root  11861 0.0 0.0 113004 2256 pts/0 S+ 23:01 0:00 grep --color=auto docker

說明這個,主要是后面指定文件系統(tǒng)的時候,需要先在 /etc/sysconfig/docker 的配置具體的storage driver(這個會寫一篇專門的Blog),然后再啟動Docker Daemon,而不能通過run命令的參數(shù)進行操作。還可以直接在host命令行通過 docker –d 進行設置。

2. Docker的存儲方式—Storage Driver

Docker模型的核心部分是有效利用分層鏡像機制,鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。不同 Docker 容器就可以共享一些基礎的文件系統(tǒng)層,同時再加上自己獨有的改動層,大大提高了存儲的效率。其中主要的機制就是分層模型和將不同目錄掛載到同一個虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem,來自 這篇文章 )。 針對鏡像存儲docker采用了幾種不同的存儲drivers,包括:aufs,devicemapper,btrfs 和overlay(來自 官網(wǎng) )。下面簡單對不同的存儲drivers做個介紹。

AUFS

AUFS(AnotherUnionFS)是一種聯(lián)合文件系統(tǒng)。 AUFS 支持為每一個成員目錄(類似 Git 的分支)設定只讀(readonly)、讀寫(readwrite)和寫出(whiteout-able)權限, 同時 AUFS 里有一個類似分層的概念, 對只讀權限的分支可以邏輯上進行增量地修改(不影響只讀部分的)。AUFS唯一一個storage driver可以實現(xiàn)容器間共享可執(zhí)行及可共享的運行庫, 所以當你跑成千上百個擁有相同程序代碼或者運行庫時時候,AUFS是個相當不錯的選擇。

Device mapper

Device mapper 是 Linux 2.6 內(nèi)核中提供的一種從邏輯設備到物理設備的映射框架機制,在該機制下,用戶可以很方便的根據(jù)自己的需要制定實現(xiàn)存儲資源的管理策略( 詳見 ) 。Device mapper driver 會創(chuàng)建一個100G的簡單文件包含你的鏡像和容器,每一個容器被限制在10G大小的卷內(nèi)(注意:這是利用loopback自動創(chuàng)建的稀疏文件,具體為 /var/lib/docker/devicemapper/devicemapper 下的data和metadata,可動態(tài)擴張)。可以調(diào)整Docker容器的大小, 具體參考 ) 你可以在啟動docker daemon時用參數(shù)-s 指定driver,也就是可以 docker -d -s devicemapper 設置docker的存儲driver。先關閉docker服務,執(zhí)行命令:

Default

?
1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# docker -d -s devicemapper
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] +job init_networkdriver()    
INFO[0000] -job init_networkdriver() = OK (0)  
INFO[0000] Loading containers: start.    
....
INFO[0000] Loading containers: done.    
INFO[0000] docker daemon: 1.4.0 4595d4f/1.4.0; execdriver: native-0.2; graphdriver: devicemapper
INFO[0000] +job acceptconnections()     
INFO[0000] -job acceptconnections() = OK (0)

另外,docker在啟動容器的時候可以指定 –storage-opt 參數(shù),但是現(xiàn)在只有devicemapper能夠接受參數(shù)設置。后面會有針對性的Blog展示。

BTRFS

Btrfs Driver 在docker build可以很高效。但是跟 devicemapper 一樣不支持設備間共享存儲(參加 官網(wǎng) )。Btrfs 支持創(chuàng)建快照(snapshot)和克隆(clone),還能夠方便的管理多個物理設備。(詳細了解可以參考 IBM對Btrfs的介紹 )

overlay

overlay跟AUFS很像,但是性能比AUFS好,有很好內(nèi)存利用,現(xiàn)在已經(jīng)合并入Linux內(nèi)核3.18了。具體使用命令: docker –d –s overlay

官網(wǎng)的Note: It is currently unsupported on btrfs or any Copy on Write filesystem and should only be used over ext4 partitions.

3 Docker目錄結(jié)構(gòu)

Docker兩個最重要的概念是鏡像和容器。那么我們pull下來的鏡像的存儲在哪里呢?鏡像運行容器啟動后,我們的操作修改的內(nèi)容存儲在哪里呢?因為具體的驅(qū)動不同,所以最終的實現(xiàn)效果不同。下面我們以Device Mapper存儲driver為例,分析下docker的存儲結(jié)構(gòu)。

1. 進入 /var/lib/docker 目錄,列出內(nèi)容:

Default

?
1
2
3
[root@localhost ~]# cd /var/lib/docker/
[root@localhost docker]# ls
containers devicemapper execdriver graph init linkgraph.db repositories-devicemapper tmp trust volumes

根據(jù)目錄的內(nèi)容,可以明顯的看到是使用了devicemapper driver。

注:以下顯示的文件夾都是在/var/lib/docker下的。

2. pull的鏡像文件存在哪個文件夾下呢?( 參考 )

pull的鏡像信息保存在了graph文件夾下,鏡像的內(nèi)容存在了 devicemapper/ devicemapper/data 下。

3. 啟動的容器運行在哪里呢?

啟動的容器配置信息保存在 containers 里,查看了還有 execdriver/native/ 。

容器里操作的內(nèi)容保存在 devicemapper/devicemapper/data 下。

4. graph的角色

在Docker架構(gòu)中扮演已下載容器鏡像的保管者,以及已下載容器鏡像之間關系的記錄者。graph的本地目錄中,關于每一個的容器鏡像,具體存儲的信息有:該容器鏡像的元數(shù)據(jù)(json),容器鏡像的大小(layersize)信息,以及該容器鏡像所代表的具體rootfs。

5. 實驗測試:

- 初始沒有啟容器:

Default

?
1
2
[root@localhost docker]# ll containers/
total 0

- 啟動一個容器:

Default

?
1
2
[root@localhost docker]# docker run -i -t --rm centos:7 /bin/bash
[root@187a8f9d2865 /]#

所啟動的容器的 UUID=187a8f9d2865

- 啟動容器前,查看查看/var/lib/docker/devicemapper/devicemapper/下文件的實際大小

Default

?
1
2
3
[root@bhDocker216 docker]# du -h devicemapper/devicemapper/*
2.1G devicemapper/devicemapper/data
3.5M devicemapper/devicemapper/metadata

- 在host的主機上查看

Default

?
1
2
[root@bhDocker216 docker]# ls containers/
187a8f9d2865c2ac***91b981

查看啟動的容器在UUID文件夾下面的內(nèi)容:

Default

?
1
2
3
4
5
6
7
8
9
[root@bhDocker216 containers]# ll 187a8f9d2865c2ac***91b981
total 24
-rw-------. 1 root root 273 Mar 5 23:59 187a8f9d2865***-json.log
-rw-r--r--. 1 root root 1683 Mar 5 23:58 config.json
-rw-r--r--. 1 root root 334 Mar 5 23:58 hostconfig.json
-rw-r--r--. 1 root root 13 Mar 5 23:58 hostname
-rw-r--r--. 1 root root 174 Mar 5 23:58 hosts
-rw-r--r--. 1 root root 69 Mar 5 23:58 resolv.conf
- 在啟動的容器添加文件,并查看。

先在運行的容器內(nèi)創(chuàng)建一個文件:

Default

?
1
2
3
4
[root@8a1e3ad05d9e /]# dd if=/dev/zero of=floppy.img bs=512 count=5760
5760+0 records in
5760+0 records out
2949120 bytes (2.9 MB) copied, 0.0126794 s, 233 MB/s

然后在/var/lib/docker/devicemapper/devicemapper/下查看文件:

Default

?
1
2
3
[root@bhDocker216 docker]# du -h devicemapper/devicemapper/*
5.5G devicemapper/devicemapper/data
4.6M devicemapper/devicemapper/metadata

這地方大小有點出入,是因為先執(zhí)行了 # dd if=/dev/zero of=test.txt bs=1M count=8000 ,創(chuàng)建一個8G大小的文件,由于太慢我終止了,但是可以明確的看到在運行的容器里進行操作,兩個文件夾都發(fā)生了改變(增加)。

- 查看graph,在只pull了一個鏡像(Ubuntu14.10)的情況下,里面出現(xiàn)了7個長UUID命名的目錄,這是怎么來的呢?

用 docker images –tree 列出鏡像樹形結(jié)構(gòu),我們可以看到鏡像的分層存儲結(jié)構(gòu)。最終的Ubuntu(第7層)是基于第6層改動的,即這種邏輯上的樹中第n層基于是第n-1層改動的,n層依賴n-1層的image。第0層,大小為0,稱為base image。

- graph/UUID目錄下內(nèi)容是啥呢?

Default

?
1
2
3
4
[root@localhost graph]# ll 01bf15a18638145eb*** -h
total 8.0K
-rw-------. 1 root root 1.6K Mar 5 18:02 json
-rw-------. 1 root root 9 Mar 5 18:02 layersize

查看layersize的內(nèi)容:數(shù)字表示層的大小(單位:B)。 josn:保存了這個鏡像的元數(shù)據(jù)(如: size,architecture,config,container,**parent的UUID** 等等)。

- 查看devicemapper/devicemapper文件夾

有兩個文件夾 data 和 metadata ,其實device mapper driver是就是把 鏡像和容器的文件 都存儲在 **data** 這個文件內(nèi)。可以通過docker info查看data和metadata的大小。 另外可以用 du –h (上面有用到)查看這兩個稀疏文件的實際大小。

- execdriver

Default

?
1
2
3
4
5
[root@bhDocker216 docker]# ls execdriver/native/
8a1e3ad05d9e66a455e683a2c***2437bdcccdfdfa
//對里面的內(nèi)容進行查看:
[root@bhDocker216 8a1e3ad05d9e66a455e***]# ls
container.json state.json

- volumes

沒有加-v參數(shù)的volumes是空的,經(jīng)測試如果啟動容器增加加-v參數(shù),volumes文件夾下將顯示一個UUID,在host進行全局搜索,只在volumes下找到了,跟鏡像和容器的UUID都沒有關系。

Default

?
1
2
3
4
5
6
7
[root@bhDocker216 docker]# find / -name 86eb77f9f5e25676f100***d5a
/var/lib/docker/volumes/86eb77f9f5e25676f100***d5a
//查看里面的內(nèi)容:
[root@bhDocker216 volumes]# ls 86eb77f9f5e25676f100***d5a
config.json
[root@bhDocker216 volumes]# cat 86eb77f9f5e25676f100***d5a /config.json
{"ID":"86eb77f9f5e25676f100a89ba727bc15185303236aae0dcf4c17223e37651d5a","Path":"/home/data","IsBindMount":true,"Writable":true}

文件夾作用表格性說明

做個總結(jié),整理一個表格,把/var/lib/docker下的不同文件夾作用說明下:

Docker 存儲驅(qū)動詳細介紹

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩美女毛片 | 99热在线播放 | 夜夜爽99久久国产综合精品女不卡 | av中文在线播放 | 日韩理伦片在线观看视频播放 | 成视频年人免费看黄网站 | 成人黄页在线观看 | 免费黄色大片 | 亚洲一区二区三区四区五区中文 | 国产三区av| 亚洲精品一区二区三区蜜桃久 | 欧美一级二级三级 | 四房婷婷| 欧美日韩亚洲国产 | 骚视频网站 | 成年人毛片在线观看 | 成人在线免费看 | 久久久久亚洲 | 欧美视频在线一区 | 午夜三区 | 久久精品一区二区三区不卡牛牛 | 中文字幕视频在线观看 | 成人午夜性a一级毛片免费看 | 亚洲aⅴ天堂av在线电影软件 | 精品无码久久久久久久动漫 | 亚洲视频精品在线观看 | 日日操天天操 | 日韩精品一区二区在线观看 | 91精品国产91久久久久久吃药 | 国产精品久久亚洲 | 国产片性视频免费播放 | 国产精品视频入口 | 日本黄色一级电影 | 艹逼逼视频| 欧美电影网站 | 午夜免费视频 | 婷婷精品 | 精品欧美乱码久久久久久1区2区 | 久久精品国产欧美亚洲人人爽 | 亚洲在线一区 | 国产精品亚洲综合 |