docker容器的数据管理简介
- docker容器的数据卷
- docker的数据卷容器
- docker数据卷的备份和还原
docker容器的数据卷
什么是数据卷(Data Volume)
docker的生存周期是与运行的程序相一致的,而我们需要数据持久化,docker容器之间也需要共享一些数据
数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
数据卷设计的目的,在于数据持久化,它完全对独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
数据卷架构:
- docker数据卷独立于docker,独立运docker的生存周期。
- docker数据卷位于docker的宿主机中文件系统。
- docker数据卷既可以是目录也可是文件。
- docker数据卷与宿主机进行数据共享。
- 同一目录或文件可以支持多个容器
数据卷的特点
- 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
- 数据卷可以在容器之间共享和重用
- 可以对数据卷里的内容直接进行修改
- 数据卷的变化不会影响镜像的更新
- 卷会一直存在,即使挂载数据卷的容器已经被删除
数据卷的使用
- 为容器添加数据卷
1 | sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash |
在本机系统的目录:在容器中映射的目录名
注:这种方式(bind mount)已不推荐使用,应使用volume方式
1 | docker volume create my_volume # 创建卷 |
详情:https://deepzz.com/post/the-docker-volumes-basic.html
- 为数据卷添加访问权限
1 | sudo docker run -v [卷名]:[容器目录]:ro(访问权限) -it ubuntu /bin/bash |
- 使用dockerfile构建包含数据卷的镜像
dockerfile指令:
VOLUME [“/data1”, “/data2”]
不能映射到本地目录,并且运行同一镜像的不同容器所创建的数据卷也是不一样的。
docker的数据卷容器
什么是数据卷容器:
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器
图示:
- 挂载数据卷容器的方法
1 | docker run --volumes-from [CONTAINER NAME] |
如果数据卷容器删除(即使同时删除挂载的数据卷)后,挂载该数据卷容器的容器的数据目录仍存在且有效。
数据卷容器的作用仅仅是将数据卷挂载的配置传递到挂载了数据卷容器的新容器中。
docker数据卷的备份与还原
- 数据备份方法
1 | docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar [container data volume] |
- 数据还原方法
1 | docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar [container data volume] |