成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

譯文:關于Docker數據容器(data only container)

開發 開發工具
數據容器就是本身只創建一個volume供其他容器共享,創建完后即退出,不執行任何任務。比如通過以下方式創建一個postgres容器。

[[186127]]

什么是數據容器?

數據容器就是本身只創建一個volume供其他容器共享,創建完后即退出,不執行任何任務。比如通過以下方式創建一個postgres容器。

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

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

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

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

如何創建數據容器?

太簡單了,創建任何容器,然后使用-v創建volume即可。但大家一定會想到用最小的鏡像吧,比如hello-world,即

  1. docker run -v /data hello-world 

但這樣是錯誤的! 為什么呢?

我們首先創建一個簡單的鏡像:

  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 

構建:

  1. docker build -t mickey_foo -< Dockerfile 

運行下:

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

輸出:

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

運行正常,沒有任何問題。

下面我們嘗試使用busybox來作為數據容器:

  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 

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

讓我們再試試使用我們剛剛構建的mickey_foo作為數據容器:

  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!!! 

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

因此我們應該使用和共享的容器相同的鏡像做數據容器鏡像?是的!

那我們使用這么大的鏡像不會浪費空間么?

為什么不使用小鏡像作為數據容器?

其中一個原因,在上一節已經解釋。遺留的一個問題是使用這么大的鏡像(因為一般的鏡像都會比較大)會不會浪費空間呢?

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

因此當我們創建了一個debian容器實例時(大約150MB),根據以上的原理,我們再創建1000個debian鏡像能夠重用原來的只讀層,需要的空間還是150MB.

容器本身并不會占任何空間,除非你修改了內容。

因此Docker無論創建一個鏡像的多少實例,都不會占據更多的空間。

因此實際上,我們為了創建數據容器而使用busybox反而會占用更多的空間,這個空間就是busybox的鏡像大小。

實際上我們經常這樣使用:

  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 

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

【本文是51CTO專欄作者“付廣平”的原創文章,如需轉載請通過51CTO獲得聯系】

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

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2014-06-03 09:55:34

DockerLinux容器Ubuntu

2021-09-16 10:21:58

topic容器容器信息

2014-09-16 10:34:59

Docker達龍云

2014-09-17 15:44:42

DockerContainer虛擬化

2024-05-09 10:28:46

容器ListElement?

2019-10-21 08:31:34

容器微服務docker

2014-09-18 14:13:54

Docker

2014-11-11 15:25:00

Dockerambassador云計算

2009-11-23 19:55:20

ibmdwDB2

2025-01-08 09:26:24

KubernetesContainer容器

2018-01-19 10:54:00

容器Kubernetes微服務

2014-12-23 13:33:35

Dockercontainerimage

2009-02-20 17:46:34

計算機英語數據庫管理系統簡介

2022-03-10 08:24:17

Docker容器SaaS

2019-12-10 08:00:46

Kata容器Linux

2019-07-08 08:59:41

Docker容器主機

2015-07-20 14:51:41

Container+聯騰訊云

2020-08-11 08:59:20

容器虛擬化技術

2017-08-07 10:04:49

數據數據治理數據管理

2019-07-16 14:44:52

DockerMySQL操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久久入口 | 日韩一区二区福利视频 | 亚洲伊人久久综合 | 成人国产精品 | 久久久久亚洲精品 | 午夜tv免费观看 | 久久免费精品视频 | 国产精品久久精品 | 午夜看看| av男人天堂影院 | 国产小视频在线观看 | 午夜三级视频 | 国产精品欧美一区二区三区 | 国产精品欧美一区二区 | 国产精品久久久久久婷婷天堂 | 人人九九精 | 精品免费国产一区二区三区 | 欧美 日韩 国产 在线 | 中文字幕在线观看一区二区 | 久久久久久久国产精品影院 | 久久精品国产一区二区电影 | 亚洲成人精选 | 日韩久久久久 | 99reav| 色精品 | 日韩国产中文字幕 | 久久av资源网 | 国产在线一区二区三区 | 蜜桃免费一区二区三区 | 免费观看黄网站 | 国产高清免费 | 一区二区视频在线 | 久久久久久久久久久久久9999 | 欧美综合一区二区三区 | 日韩欧美三级电影 | 91视视频在线观看入口直接观看 | 四虎影院在线免费观看 | 成人欧美一区二区三区黑人孕妇 | 精品在线免费观看视频 | 玖玖视频免费 | 97超碰成人|