Docker容器的數據管理

什麼是數據卷(Data Volume)

數據卷是經過特殊設計的目錄,可以繞過聯合文件 UFS,爲一個或者多個容器提供訪問。

其設計目的在於數據的永久化,數據卷是存在於宿主機中的文件或者目錄,因此它與Docker容器的生命週期是完全分離的,Docker不會在容器刪除時刪除其掛載的數據卷,也不會存在類似的垃圾收集機制,對容器引用的數據捲進行處理。

數據卷的特點:

  • 數據卷在容器啓動時初始化,如果容器使用的鏡像再掛載點包含了數據,這些數據會拷貝到新初始化的數據卷中。
  • 數據卷可以在容器之間共享和重用
  • 可以對數據卷裏的內容直接進行修改
  • 數據卷的變化,不會影響鏡像的更新
  • 卷會一直存在,即使掛載數據卷的容器已經被刪除

數據卷的架構:

數據卷的使用

在容器啓動時,爲容器添加數據卷需要用到 docker run 命令的 -v 選項:

docker run -v <宿主機文件或目錄>:<對應的容器目錄>[:ro ] [image]

 操作示例:

# 查看宿主機中 /usr/local/src/dockerfiles/ 文件夾下的內容
[root@localhost ~]# ls /usr/local/src/dockerfiles/
dockerfile01  nginx-1.16.1.tar.gz

# 將 /usr/local/src/dockerfiles/ 作爲數據卷掛載到 容器的 /usr/local/src/volume 下
[root@localhost ~]# docker run -it -v /usr/local/src/dockerfiles/:/usr/local/src/volume --name nginx_server5 centos_nginx:1.0  /bin/bash

# 若報錯:ls: cannot access /usr/local/src/volume/dockerfile01: Permission denied
# 使用如下命令:增加 --privileged=true 選項
[root@localhost ~]# docker run -it -v /usr/local/src/dockerfiles/:/usr/local/src/volume --privileged true --name nginx_server5 centos_nginx:1.0  /bin/bash

# 查看數據卷的內容
[root@427a4e5b4089 /]# ls /usr/local/src/volume/
dockerfile01  nginx-1.16.1.tar.gz

數據卷容器

命名的容器掛載數據卷,其它容器通過掛載這個容器實現數據共享,掛載數據卷的容器,就叫做數據卷容器。

使用Dockerfile 的 VOLUME 指令可以構建一個包含數據卷的鏡像,例如:

# 註釋:包含數據卷的Centos鏡像
FROM centos:7.6.1810
# 標明作者的名字和聯繫方式
MAINTAINER pengjunlee [email protected]
VOLUME ["/usr/local/volume"]
CMD /bin/bash

使用上面的 Dockerfile 構建鏡像:

[root@localhost dockerfiles]# docker build -t centos_volume:1.0 -f ./dockerfile02 .
[root@localhost dockerfiles]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_volume       1.0                 ee4ccab4731b        26 minutes ago      202 MB

啓動一個數據卷容器,將其命名爲 volume1:

[root@localhost dockerfiles]# docker run -it --name volume1 centos_volume:1.0
# 查看數據卷目錄是否存在
[root@e12534f3d46b /]# ls /usr/local/
bin etc games include lib lib64 libexec sbin share src volume

使用數據卷容器

使用數據卷容器共享數據的架構:

 

通過 docker run 命令的 --volumes-from 選項來指定容器要掛載的數據卷容器。

[root@localhost dockerfiles]# docker run -it --name centos1 --volumes-from volume1 centos /bin/bash
[root@9ac6ea27725c /]# ls /usr/local/
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  volume

數據卷的備份和還原

數據卷的備份和還原本質上就是系統文件的備份和還原。

例如,在容器啓動時對數據卷的內容做備份:

[root@localhost dockerfiles]# docker run --volumes-from volume1 -v ~/backup:/backup --privileged=true centos tar cvf backup/volume.tar usr/local/volume

usr/local/volume/

還原數據:

[root@localhost dockerfiles]# docker run --volumes-from volume1 -v ~/backup:/backup --privileged=true centos tar xvf backup/volume.tar usr/local/volume

usr/local/volume/

 

發佈了247 篇原創文章 · 獲贊 512 · 訪問量 1255萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章