日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
譯文:關(guān)于Docker數(shù)據(jù)容器(dataonlycontainer)

什么是數(shù)據(jù)容器?

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

數(shù)據(jù)容器就是本身只創(chuàng)建一個(gè)volume供其他容器共享,創(chuàng)建完后即退出,不執(zhí)行任何任務(wù)。比如通過以下方式創(chuàng)建一個(gè)postgres容器。

 
 
 
  1. docker run --name dbdata postgres echo "Data-only container for postgres" 

該容器運(yùn)行echo "Data-only container for postgres"即退出,然而只要沒有刪除該容器,該容器/var/lib/postgresql/data的volume(在Dockerfile使用VOLUME指令定義)就會(huì)一直存在。

然后我們可以新建若干容器來共享數(shù)據(jù),比如:

 
 
 
  1. docker run -d --volumes-from dbdata --name db1 postgres 

如何創(chuàng)建數(shù)據(jù)容器?

太簡(jiǎn)單了,創(chuàng)建任何容器,然后使用-v創(chuàng)建volume即可。但大家一定會(huì)想到用最小的鏡像吧,比如hello-world,即

 
 
 
  1. docker run -v /data hello-world 

但這樣是錯(cuò)誤的! 為什么呢?

我們首先創(chuàng)建一個(gè)簡(jiǎn)單的鏡像:

 
 
 
  1. FROM debian:jessie 
  2. RUN useradd mickey 
  3. RUN mkdir /foo && touch /foo/bar && chown -R mickey:mickey /foo 
  4. USER mickey 
  5. CMD ls -lh /foo 

構(gòu)建:

 
 
 
  1. docker build -t mickey_foo -< Dockerfile 

運(yùn)行下:

 
 
 
  1. docker run --rm -v /foo mickey_foo 

輸出:

 
 
 
  1. total 0  
  2. -rw-r--r-- 2 mickey mickey 0 Nov 18 05:58 bar 

運(yùn)行正常,沒有任何問題。

下面我們嘗試使用busybox來作為數(shù)據(jù)容器:

 
 
 
  1. docker run -v /foo --name mickey_data busybox true 
  2. docker run --rm --volumes-from mickey_data mickey_foo 

輸出:

 
 
 
  1. total 0  
  2. # Empty WTF?? 
 
 
 
  1. docker run --rm --volumes-from mickey_data mickey_foo ls -lh / 
 
 
 
  1. total 68K 
  2. drwxr-xr-x   2 root root 4.0K Nov 18 06:02 bin 
  3. drwxr-xr-x   2 root root 4.0K Oct  9 18:27 boot 
  4. drwxr-xr-x   5 root root  360 Nov 18 06:05 dev 
  5. drwxr-xr-x   1 root root 4.0K Nov 18 06:05 etc 
  6. drwxr-xr-x   2 root root 4.0K Nov 18 06:02 foo 
  7. drwxr-xr-x   2 root root 4.0K Oct  9 18:27 home 
  8. drwxr-xr-x   9 root root 4.0K Nov 18 06:02 lib 
  9. drwxr-xr-x   2 root root 4.0K Nov 18 06:02 lib64 
  10. drwxr-xr-x   2 root root 4.0K Nov  5 21:40 media 
  11. drwxr-xr-x   2 root root 4.0K Oct  9 18:27 mnt 
  12. drwxr-xr-x   2 root root 4.0K Nov  5 21:40 opt 
  13. dr-xr-xr-x 120 root root    0 Nov 18 06:05 proc 
  14. drwx------   2 root root 4.0K Nov 18 06:02 root 
  15. drwxr-xr-x   3 root root 4.0K Nov 18 06:02 run 
  16. drwxr-xr-x   2 root root 4.0K Nov 18 06:02 sbin 
  17. drwxr-xr-x   2 root root 4.0K Nov  5 21:40 srv 
  18. dr-xr-xr-x  13 root root    0 Nov 18 06:05 sys 
  19. drwxrwxrwt   2 root root 4.0K Nov  5 21:46 tmp 
  20. drwxr-xr-x  10 root root 4.0K Nov 18 06:02 usr 
  21. drwxr-xr-x  11 root root 4.0K Nov 18 06:02 var 

Owened by root? WTF???

 
 
 
  1. docker run --rm --volumes-from mickey_data mickey_foo touch /foo/ba 
 
 
 
  1. touch: cannot touch '/foo/bar': Permission denied 

發(fā)生了什么呢?我們的/foo 仍然存在, 但是它是空的并且所有者是root?

讓我們?cè)僭囋囀褂梦覀儎倓倶?gòu)建的mickey_foo作為數(shù)據(jù)容器:

 
 
 
  1. ~: docker rm -v mickey_data # remove the old one 
  2. mickey_data 
  3. ~: docker run --name mickey_data -v /foo mickey_foo true 
  4. ~: docker run --rm --volumes-from mickey_data mickey_foo 
  5. total 0 
  6. -rw-r--r-- 1 mickey mickey 0 Nov 18 05:58 bar 
  7. # Yes! 
  8. ~: docker run --rm --volumes-from mickey_data mickey_foo ls -lh / 
  9. total 68K 
  10. drwxr-xr-x   2 root   root   4.0K Nov 18 06:02 bin 
  11. drwxr-xr-x   2 root   root   4.0K Oct  9 18:27 boot 
  12. drwxr-xr-x   5 root   root    360 Nov 18 06:11 dev 
  13. drwxr-xr-x   1 root   root   4.0K Nov 18 06:11 etc 
  14. drwxr-xr-x   2 mickey mickey 4.0K Nov 18 06:10 foo 
  15. drwxr-xr-x   2 root   root   4.0K Oct  9 18:27 home 
  16. drwxr-xr-x   9 root   root   4.0K Nov 18 06:02 lib 
  17. drwxr-xr-x   2 root   root   4.0K Nov 18 06:02 lib64 
  18. drwxr-xr-x   2 root   root   4.0K Nov  5 21:40 media 
  19. drwxr-xr-x   2 root   root   4.0K Oct  9 18:27 mnt 
  20. drwxr-xr-x   2 root   root   4.0K Nov  5 21:40 opt 
  21. dr-xr-xr-x 121 root   root      0 Nov 18 06:11 proc 
  22. drwx------   2 root   root   4.0K Nov 18 06:02 root 
  23. drwxr-xr-x   3 root   root   4.0K Nov 18 06:02 run 
  24. drwxr-xr-x   2 root   root   4.0K Nov 18 06:02 sbin 
  25. drwxr-xr-x   2 root   root   4.0K Nov  5 21:40 srv 
  26. dr-xr-xr-x  13 root   root      0 Nov 18 06:05 sys 
  27. drwxrwxrwt   2 root   root   4.0K Nov  5 21:46 tmp 
  28. drwxr-xr-x  10 root   root   4.0K Nov 18 06:02 usr 
  29. drwxr-xr-x  11 root   root   4.0K Nov 18 06:02 var 
  30. # YES!! 
  31. ~: docker run --rm --volumes-from mickey_data mickey_foo touch /foo/baz 
  32. ~: docker run --rm --volumes-from mickey_data mickey_foo ls -lh /foo 
  33. total 0 
  34. -rw-r--r-- 1 mickey mickey 0 Nov 18 06:11 bar 
  35. -rw-r--r-- 1 mickey mickey 0 Nov 18 06:12 baz 
  36. # YES!!! 

由于我們剛剛使用了相同的鏡像作為數(shù)據(jù)容器鏡像,共享的容器能夠找到共享數(shù)據(jù)。為什么使用busybox不可以呢?由于busybox沒有/foo這個(gè)目錄,當(dāng)我們使用-v創(chuàng)建/foo這個(gè)數(shù)據(jù)卷時(shí),docker會(huì)以默認(rèn)用戶自動(dòng)創(chuàng)建對(duì)應(yīng)的目錄(這里是root),而--volumes-from僅僅是重用存在的卷,而不會(huì)對(duì)卷自動(dòng)做任何事情。因此當(dāng)我們嘗試去寫/foo時(shí)由于沒有權(quán)限(root所有,mickey用戶).

因此我們應(yīng)該使用和共享的容器相同的鏡像做數(shù)據(jù)容器鏡像?是的!

那我們使用這么大的鏡像不會(huì)浪費(fèi)空間么?

為什么不使用小鏡像作為數(shù)據(jù)容器?

其中一個(gè)原因,在上一節(jié)已經(jīng)解釋。遺留的一個(gè)問題是使用這么大的鏡像(因?yàn)橐话愕溺R像都會(huì)比較大)會(huì)不會(huì)浪費(fèi)空間呢?

首先我們需要知道Docker的文件系統(tǒng)是如何工作的。Docker鏡像是由多個(gè)文件系統(tǒng)(只讀層)疊加而成。當(dāng)我們啟動(dòng)一個(gè)容器的時(shí)候,Docker會(huì)加載只讀鏡像層并在其上(譯者注:鏡像棧頂部)添加一個(gè)讀寫層。如果運(yùn)行中的容器修改了現(xiàn)有的一個(gè)已經(jīng)存在的文件,那該文件將會(huì)從讀寫層下面的只讀層復(fù)制到讀寫層,該文件的只讀版本仍然存在,只是已經(jīng)被讀寫層中該文件的副本所隱藏。當(dāng)刪除Docker容器,并通過該鏡像重新啟動(dòng)時(shí),之前的更改將會(huì)丟失。在Docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System(聯(lián)合文件系統(tǒng))。

因此當(dāng)我們創(chuàng)建了一個(gè)debian容器實(shí)例時(shí)(大約150MB),根據(jù)以上的原理,我們?cè)賱?chuàng)建1000個(gè)debian鏡像能夠重用原來的只讀層,需要的空間還是150MB.

容器本身并不會(huì)占任何空間,除非你修改了內(nèi)容。

因此Docker無論創(chuàng)建一個(gè)鏡像的多少實(shí)例,都不會(huì)占據(jù)更多的空間。

因此實(shí)際上,我們?yōu)榱藙?chuàng)建數(shù)據(jù)容器而使用busybox反而會(huì)占用更多的空間,這個(gè)空間就是busybox的鏡像大小。

實(shí)際上我們經(jīng)常這樣使用:

 
 
 
  1. ~: docker run --name mydb-data --entrypoint /bin/echo mysql Data-only container for mydb 
  2. ~: docker run -d --name mydb --volumes-from mydb-data mysql 

上面的實(shí)例指行/bin/echo mysql Data-only container for mydb,能夠更容易知道這是一個(gè)數(shù)據(jù)容器,利于使用grep查找.

【本文是專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請(qǐng)通過獲得聯(lián)系】

戳這里,看該作者更多好文


本文標(biāo)題:譯文:關(guān)于Docker數(shù)據(jù)容器(dataonlycontainer)
本文鏈接:http://www.5511xx.com/article/dpdgjps.html