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

Docker 數據持久化的三種方案,你總能用到

新聞 數據庫運維
容器中的數據可以存儲在容器層,但是將數據存放在容器層存在一些問題。

 [[275980]]

容器中的數據可以存儲在容器層。但是將數據存放在容器層存在以下問題:

  • 數據不是持久化。意思是如果容器刪除了,這些數據也就沒了
  • 主機上的其它進程不方便訪問這些數據
  • 對這些數據的I/O會經過存儲驅動,然后到達主機,引入了一層間接層,因此性能會有所下降

Docker 提供了3種持久化數據的方式:

  1. volumes:存于主機文件系統中的某個區域,由Docker管理(/var/lib/docker/volumes/ on linux)。非Docker進程不應該修改這些數據。卷是Docker中持久化數據的最好方式
  2. bind mount:存于主機文件系統中的任意位置。非Docker進程可以修改這些數據
  3. tmpfs mount(Linux中):存于內存中(注意,并不是持久化到磁盤)。在容器的生命周期中,它能被容器用來存放非持久化的狀態或敏感信息

Docker 數據持久化的三種方案,你總能用到

volumes

如果沒有顯式創建,一個卷會在最開始掛載時被創建。當容器停止時,卷仍然存在。多個容器可以通過read-write或read-only的方式使用同一個卷。

只有在顯式刪除時,卷才會被刪除。如果將一個空卷掛載到容器中一個存有文件或目錄的目錄中,這些文件或目錄會被拷貝到空卷中;如果將一個非空卷掛載到容器中一個存有文件或目錄的目錄中,這些文件或目錄會被隱藏。

使用

  • 創建:docker volume create
  • 刪除某個卷:docker volume rm 卷名
  • 刪除所有未使用的卷:docker volume prune
  • 列出所有卷:docker volume ls
  • 查看某個卷的信息:docker volume inspect 卷名
  • 掛載到容器:-v--volume。如果是Docker17.06或更高:推薦使用--mount。(同 bind mount)
  1. 掛載類型:key為type,value為bind、volume或tmpfs
  2. 掛載源:key為source或src,對于命名卷,value為卷名,對于匿名卷,則忽略
  3. 容器中的掛載點:key為destination、dst或target,value為容器中的路徑
  4. 讀寫類型:value為readonly,沒有key
  5. volume-opt選項,可以出現多次。比如volume-driver=local,volume-opt=type=nfs,…

第一個域:對于命名卷,為卷名;匿名卷,則忽略,此時會創建匿名卷

第二個域:容器中的掛載點

第三個域:可選參數,由','隔開,如ro

-v或—volume:由3個域組成,’:’分隔

—mount:由多個’,’隔開的鍵值對

=組成:

當使用docker service create 啟動Docker服務時,只支持--mount,不支持-v和--volume。并且每個服務容器使用它們各自的本地卷,因此如果使用本地(local)卷驅動,容器無法通過卷共享數據,但是一些卷驅動支持共享存儲。Docker for AWS和Doocker for Azure都使用Cloundstor plugin支持持久存儲

場景

  • 多個運行容器間共享數據
  • 當Docker主機不確保具有給定的目錄或文件時。卷可以將容器運行時與Docker主機的配置解耦合
  • 備份、恢復、或將數據從一個Docker主機遷移到另一個Docker主機時

bind mount

主機中的文件或目錄通過全路徑被引用。在使用綁定掛載時,這些目錄或文件不一定要已經存在。

如果使用這種方式將一個目錄掛載到容器中一個存有文件或目錄的目錄中,這些文件或目錄會被隱藏;如果主機中的文件或目錄不存在,當使用--mount掛載時,Docker會報錯,當使用-v--volume時,會在主機上創建目錄

使用

掛載到容器:-v或—volume。如果是Docker17.06或更高:推薦使用—mount。(同 volumes)

  • -v--volume:由3個域組成,':'分隔
  1. 第一個域:對于命名卷,為卷名;匿名卷,則忽略,此時會創建匿名卷
  2. 第二個域:容器中的掛載點
  3. 第三個域:可選參數,由','隔開,如ro
  • --mount:由多個','隔開的鍵值對<key>=<value>組成:
  1. 掛載類型:key為type,value為bind、volume或tmpfs
  2. 掛載源:key為source或src,value為主機中文件或目錄的路徑
  3. 容器中的掛載點:key為destination、dst或target,value為容器中的路徑
  4. 讀寫類型:value為readonly,沒有key
  5. bind-propagation選項:key為bind-propagation,value為rprivate、private、rshared、shared、rslave或slave
  6. 一致性選項:value為consistent、delegated、cached。這個選項僅僅適用于Docker for Mac
  7. --mount不支持z和Z(這個不同于-v和—volume)

場景

大體上來說,只要可能,最好使用volumes

  • 主機與容器共享配置文件(Docker默認情況下通過這種方式為容器提供DNS解析,通過將/etc/resolv.conf掛載到容器中)
  • 共享源代碼或build artifacts(比如將Maven的target/目錄掛載到容器中,每次在Docker主機中build Maven工程時,容器能夠訪問到那些rebuilt artifacts)
  • 當 docker主機中的文件或目錄結構和容器需要的一致時

bind propagation

對于bind mount和volumes,默認都是rprivate。只有在使用bind mount時可配置,且必須在linux下。bind propagation是個超前主題,對于大多數用戶來說,并不需要配置

對于一個掛載點/mnt,假設它同時也被掛載到/tmp。bind propagation控制 whether a mount on /tmp/a would also be available on /mnt/a

Docker 數據持久化的三種方案,你總能用到

在設置bind propagation之前,主機文件系統需要支持bind propagation

下面的例子將主機中的target/掛載到容器中2次:

  1. docker run -d  
  2.   -it  
  3.   --name devtest  
  4.   --mount type=bind,source="$(pwd)"/target,target=/app  
  5.   --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave  
  6.   nginx:latest 

此時如果創建/app/foo//app2/foo也會存在

selinux label

你能添加zZ選項來修改掛載到容器中的主機文件或目錄的selinux label:

  • z選項指明bind mount的內容在多個容器間是共享的
  • Z選項指明bind mount的內容是私有不共享的

要特別小心的使用這兩個選項。”Bind-mounting a system directory such as /home or /usr with the Z option renders your host machine inoperable and you may need to relabel the host machine files by hand”

tmpfs mount

只在linux中支持

相對于volumes和bind mount,tmpfs mount是臨時的,只在主機內存中持久化。當容器停止,tmpfs mount會被移除。對于臨時存放敏感文件很有用

不同于volumes和bind mount,多個容器無法共享tmpfs mount

使用

  • 掛載到容器:—tmpfs。如果是Docker17.06或更高:推薦使用—mount
  1. 掛載類型:key為type,value為bind、volume或tmpfs
  2. 容器中的掛載點:key為destination、dst或target,value為容器中的路徑
  3. tmpfs-size和tmpfs-mode選項
  4. —tmpfs:直接指定容器中的掛載點。不允許指定任何配置選項
  5. —mount:由多個’,’隔開的鍵值對

=組成:

Docker 數據持久化的三種方案,你總能用到

場景

  • 最好的使用場景是你既不想將數據存于主機,又不想存于容器中時。這可以是出于安全的考慮,或當應用需要寫大量非持久性的狀態數據時為了保護容器的性能

volume drivers

機器間共享數據

當構建錯誤容忍應用時,可能需要配置同一個服務的多個副本來訪問相同的文件:

Docker 數據持久化的三種方案,你總能用到

有多種方法來實現這個目的:

  • 為應用添加邏輯,將文件存儲到一個云對象存儲系統(如Amazon S3)中
  • 使用一個支持將文件寫入外部存儲系統(如NFS或Amazon S3)的driver來創建卷

volume drivers可以將底層存儲系統從應用邏輯中抽象出來。比如,如果你的服務使用一個具有NFS driver的卷,你能更新你的服務使用不同的driver,作為在云中存儲數據的示例,而不更改應用程序邏輯

使用

在使用docker volume create或驅動容器創建匿名卷時,可以指定一個volume drivers。下面的例子使用vieux/sshfs作為volume drivers

假設有2個節點,第一個節點是Docker主機,它能SSH到第二個節點

1、在Docker主機中,安裝vieux/sshfs插件

  1. docker plugin install --grant-all-permissions vieux/sshfs 

2、使用卷驅動創建卷

1)創建命名卷

  1. docker volume create --driver vieux/sshfs  
  2.   -o sshcmd=test@node2:/home/test  
  3.   -o password=testpassword  
  4.   sshvolume 

2)啟動容器時使用卷驅動創建匿名卷

  1. docker run -d  
  2.   --name sshfs-container  
  3.   --volume-driver vieux/sshfs  
  4.   --mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword  
  5.   nginx:latest 

3、備份、恢復、遷移數據卷

1)備份一個容器

  1. docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 
  • 啟動一個新容器,掛載dbstore容器中的卷
  • 掛載一個本地主機目錄到容器/backup
  • 使用tar將dbdata卷中的數據打包成backup.tar

2)用備份恢復容器

使用剛剛創建的備份來恢復容器:

  1. docker run -v /dbdata --name dbstore2 ubuntu /bin/bash 

然后,在新創建的容器的卷中使用tar解包備份的數據:

  1. docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1" 

 

 

責任編輯:張燕妮 來源: 高效運維
相關推薦

2012-10-09 10:09:19

數據結構

2024-11-26 07:47:41

2017-07-03 18:24:39

MySQL數據冗余

2022-03-22 10:24:48

Linux開源Elasticsea

2022-06-20 15:08:42

數據貨幣數字化轉型數據

2012-10-10 10:13:22

數據結構

2012-10-18 10:40:46

數據結構

2012-10-08 15:59:38

數據結構

2012-10-08 14:52:56

數據結構

2012-10-10 10:30:18

數據結構

2010-09-30 14:40:45

2022-07-22 20:00:01

高可用路由

2021-09-10 10:12:36

低代碼遺留系統舊系統

2009-07-20 15:08:41

Spring實例化Be

2022-05-07 09:20:38

智能客服模塊方案

2024-10-10 10:07:07

2010-08-31 11:14:32

2010-05-25 18:50:22

MySQL安裝

2023-08-17 16:17:00

Docker前端

2015-11-12 10:06:28

數據中心模塊化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99九九久久 | 国产精品日本一区二区在线播放 | 精品国产乱码久久久久久丨区2区 | 欧美一区二区成人 | 中文字幕第十页 | 色就干| 一区二区三区中文字幕 | 日韩欧美在线观看一区 | 蜜桃在线视频 | 91精品国产欧美一区二区 | 亚洲精品久久久久久久久久久 | 中文字幕日韩欧美一区二区三区 | 日本一二三区在线观看 | 国产精品一区在线观看 | 中文字幕在线网 | 久久爱黑人激情av摘花 | 91秦先生艺校小琴 | 日韩在线观看网站 | 欧美日韩国产免费 | 国产综合视频 | 日本黄色大片免费 | 中文字幕免费在线 | 91免费看片 | 紧缚调教一区二区三区视频 | av永久 | 欧美成年人视频在线观看 | 香蕉久久久 | 欧美日韩免费 | 欧美一级做性受免费大片免费 | 国产精品一区二区在线 | 国产美女一区二区 | 亚洲精品视频在线观看视频 | 亚洲一区二区免费视频 | 中日av | 欧美精品一区二区在线观看 | 找个黄色片 | 亚洲精品麻豆 | 成人亚洲片 | 国产在线观看一区二区三区 | 亚洲精品二区 | 91就要激情 |