您的位置:首页 > 大数据 > 人工智能

manage_data_in_containers

2015-06-02 18:23 423 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: