美文网首页程序猿的进阶屋
Docker容器的数据卷

Docker容器的数据卷

作者: 2010jing | 来源:发表于2017-12-25 11:21 被阅读51次

数据卷

数据卷是经过特殊设计的目录,可以绕过联合文件 UFS,为一个或者多个容器提供访问。
设计目的: 在于数据的永久化,它完全独立于容器的生命周期,因此,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引起的数据卷进行处理。

特点:

  • 数据卷在容器启动时初始化,如果容器使用的镜像再挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
  • 数据卷可以在容器之间共享和重用
  • 可以对数据卷里的内容直接进行修改修
  • 数据卷的变化,不会影响镜像的更新
  • 卷会一直存在,即使挂载数据卷的容器已经被删除

数据卷的使用

为容器添加数据卷

docker run -it -v ~/datavolume:/data 2010jing/web /bin/bash

root@d32e282e6523:/# cd data/
root@d32e282e6523:/data# ls
root@d32e282e6523:/data# touch c1
root@d32e282e6523:/data# echo "hello world" > c1
root@d32e282e6523:/data# cat c1
hello world
root@d32e282e6523:/data# hejing@learning:~$ ls
data        Desktop    Downloads         get-docker.sh  mysite    Projects  Templates  web1
datavolume  Documents  examples.desktop  Music          Pictures  Public    Videos
hejing@learning:~$ cd datavolume/
hejing@learning:~/datavolume$ ls
c1
hejing@learning:~/datavolume$ cat c1
hello world
hejing@learning:~/datavolume$

在容器中创建文件 c1 并且写入数据,

// 进入后台守护进程
CTRL + P
CTRL + Q

在容器外,的datavalumne 中同时也能看到c1,并且也有相同数据。

为数据卷添加访问权限

docker run -it -v ~/datavolume:/data:ro 2010jing/web /bin/bash
root@4b6a4e69bfdc:/# touch data/c2
touch: cannot touch 'data/c2': Read-only file system
root@4b6a4e69bfdc:/#

使用Dockerfile构建包含数据卷的镜像
Dockerfile指令:

VOLUME ['/datavolume1','/datavolume2']
cmd /bin/bash

构建镜像

sudo docker build -t 2010jing/dvt .

创建容器

hejing@learning:/dockerfile/dvt$ docker run -it --name dvt3 2010jing/dvt
root@9ede358d8d83:/# ls
bin  boot  datavolume1  datavolume2  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@9ede358d8d83:/#

可以看到,创建容器同时也创建了 datavolume1 datavolume2。


使用数据卷容器
挂载方法:

docker run --volumes-from [CONTAINER_NAME]

创建 容器 dvt4, 并且在 datavolume1 内写入内容 "test3" 到一个文件 c4 内。

hejing@learning:~$ docker run -it --name dvt4 2010jing/dvt
root@19ce80a5dc75:/# ls
bin  boot  datavolume1  datavolume2  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@19ce80a5dc75:/# cd datavolume1
root@19ce80a5dc75:/datavolume1# ls
root@19ce80a5dc75:/datavolume1# echo "test3" > c4
root@19ce80a5dc75:/datavolume1# ls
c4
root@19ce80a5dc75:/datavolume1# cat c4
test3
root@19ce80a5dc75:/datavolume1# exit
exit

新建一个容器dvt5, 并且使用 --volumes-from

hejing@learning:~$ docker run -it --name dvt5 --volumes-from dvt4 2010jing/dvt
root@adf81690923b:/# ls
bin  boot  datavolume1  datavolume2  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@adf81690923b:/# cd datavolume1/
root@adf81690923b:/datavolume1# ls
c4
root@adf81690923b:/datavolume1# cat c4
test3
root@adf81690923b:/datavolume1#

可以看到 数据c4 已经存在于 容器 dvt5 内的 datavolume1 内,并且内容与 容器的 dvt4 的 一致。


Docker数据卷的备份和还原

备份

启动一个新容器来执行压缩命令

hejing@learning:~$ docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt6 2010jing/dvt tar cvf /backup/dvt5.tar /datavolume1 /datavolume2
tar: Removing leading `/' from member names
/datavolume1/
/datavolume1/c4
/datavolume2/
hejing@learning:~$ ls backup/
dvt5.tar
hejing@learning:~$

还原

首先启动一个新容器 backcontainer

hejing@learning:~$  docker run -v /datavolume1 /datavolume2 -it --name backcontainer 2010jing/web

再执行一个新容器来执行恢复数据命令


hejing@learning:~$ docker run --volumes-from backcontainer -v ~/backup:/backup 2010jing/dvt tar -xvf /backup/dvt5.tar
datavolume1/
datavolume1/c4
datavolume2/
hejing@learning:~$ docker start -i backcontainer
root@2c3b63a33c35:/# ls
bin  boot  datavolume1  datavolume2  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@2c3b63a33c35:/# cd datavolume1/
root@2c3b63a33c35:/datavolume1# ls
c4
root@2c3b63a33c35:/datavolume1# cat c4
test3
root@2c3b63a33c35:/datavolume1#

可以看到在容器 container 中已经恢复了数据。

相关文章

  • 【现学现忘Docker基础】— 21.Docker容器数据卷(一

    1、什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷)。 当Docker容器...

  • docker容器数据卷

    什么是容器数据卷 把docker容器运行产生的数据持久化,相当于容器的外置硬盘 容器数据卷的特点 1.数据卷可在容...

  • Docker 数据管理

    Volume(数据卷) 将Docker主机数据挂载到容器 创建数据卷 查看数据卷详细信息 用卷创建一个容器,让这个...

  • Docker 容器数据卷

    Docker 容器数据卷 如果不写容器外路径,则会给你定义一个路径 什么是容器数据卷(volume) 需求: 容器...

  • 第六篇 : Docker 容器的数据管理

    一、容器的数据卷 1. 什么是数据卷? docker的理念之一就是将应用和运行的环境打包,因此docker容器的生...

  • Docker(四) 存储卷

    docker存储卷 数据卷 为什么需要数据卷(存储卷)docker镜像由多个只读层叠加而成,启动容器时,docke...

  • Docker(2)-容器数据卷-DockerFile-Docke

    容器数据卷 1. 什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像! 数据?如果数据都在容器中...

  • Docker基础(3) 数据卷

    创建数据卷 挂载Host目录作为数据卷 挂载Host的文件作为数据卷 数据卷容器 数据卷的备份和恢复 Docker...

  • docker数据卷和数据镜像

    添加数据卷docker run的时候添加参数 -v /localpath:/dockerpath 添加数据卷容器...

  • Docker笔记之总结

    Docker笔记之Docker初体验Docker笔记之容器Docker笔记之网络管理Docker笔记之数据卷Doc...

网友评论

    本文标题:Docker容器的数据卷

    本文链接:https://www.haomeiwen.com/subject/mvikgxtx.html