manage_data_in_containers

docker中有两种基本的方式来管理container中的data
(1)、data volume
(2)、data volume containter

1、Data volumes
A data volume is a specially-designated directory within one or more containers that bypasses the Union File System. Data volumes provide several useful features for persistent or shared data:
数据卷是一个容器或多个容器含有的一个特殊设计的目录,这个目录通过UFS文件系统管理;数据卷可以为数据持久化和数据共享提供下面的特征:
(1)、Volumns在container创建时进行初始化,如果container的base image包含指定mount point的数据,该数据会copy到新volume。
(2)、data volumes 可以在container中shared and reuse。
(3)、data volumes的change是directly made。
(4)、对image的update不会对data volumes造成change。
(5)、即使container删除了,data volumes仍然存在。
data volumes设计用来支持数据持久化,它独立于container的生命周期。

在docker create和docker run命令中加-v标识来对contianer添加data volumes。可以使用-v多次添加多个data volumes。
docker run -d -P --name web -v /webapp training/webapp python app.py

上面的命令是为 web 容器中创建一个卷/webapp。
(可以在dockerfile中使用VOLUME指令添加卷)

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
将docker host上的/src/webapp目录mount到container的data volumes /opt/webapp上,(若container中存在/opt/webapp,它的内容会被docker host上的/src/webapp覆盖,
若docker host上/opt/webapp目录不存在,docker会为其创建)
注:不能通过dockerfile来mount docker host的目录到container的data volumes上,因为dockerfile中设及的目录为container私有,不能用于share。

mount目录设为readonly
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

mount docker host上文件到container中的data volumes。
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

2、data volume containter
creating and mount data volume containter

如果你有一些持久化数据想在多个container中进行shared
可以先创建一个带有volumes的容器,然后把数据mount到容器中,在创建其他容器可以mount这个容器中的volumes数据。
(1)、创建带有volumes /dbdata的容器dbdata
docker create -v /dbdata --name dbdata training/postgres /bin/true
(2)、创建容器volume来自 dbdata容器中
docker run -d --volumes-from dbdata --name db1 training/postgres

docker run -d --volumes-from dbdata --name db2 training/postgres

可以多次使用--volumes-from挂载多个volumes,也可以使用--volumes-from链式挂载volumes
docker run -d --name db3 --volumes-from db1 training/postgres
db3————db1————dbdata

删除mount volumes的容器,默认不会删除volumes,需要显示使用docker rm -v指定mount的volume

3、备份
使用下面的命令可以备份volumes数据/dbdata为当前目录下backup.tar
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
创建一个带有volumes数据的dbdata2容器
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
restore数据
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值