Docker的数据管理

本文围绕Docker数据管理展开,介绍了数据卷管理,可实现宿主机与容器的数据共享;数据卷容器管理,能达成多个容器间的数据共享。还阐述了数据备份方案,将数据卷容器内容备份到本地;以及数据还原方案,把备份数据恢复到数据卷容器中。

一、数据卷管理

数据卷的作用是将宿主机的某个磁盘目录映射到容器的某个目录,从而实现宿主机和容器之间的数据共享。

命令格式:

$ docker run -itd --name [容器名称] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]

下面实现一个使用数据卷实现文件共享的案例:把宿主机的zhong-test目录挂载到容器的tmp目录。

 docker run -itd --name nginx-1 -v /home/zhongliwen/zhong-test:/tmp nginx

二、数据卷容器管理

数据卷容器的作用是实现多个容器之间的数据共享。其实,数据卷容器也是一个容器,但是与其他Docker容器不一样的是,数据卷容器是专门用来提供数据卷给其他容器进行挂载操作。

下面实现使用数据卷容器实现容器之间数据共享的案例。具体需求如下:

第一步:创建一个数据卷容器。

$ docker create -v [数据卷容器目录] --name [数据卷容器名称] [镜像名称] [命令(可选)]

例如:使用nginx镜像创建一个名为“container01”容器,并在该容器中创建一个data目录。

$ docker create -v /data --name container01 nginx

第二步:创建两个容器,并且把它们挂载到上面的数据卷容器中。

$ docker run --volumns-from [数据卷容器ID或名称] -tid --name [容器名称] [镜像名称] [命令(可选)]

例如:

$ docker run --volumes-from container01 -tid --name nginx-test-1 nginx
$ docker run --volumes-from container01 -tid --name nginx-test-2 nginx

执行完后,容器的状态如下图所示:
在这里插入图片描述
测试步骤:

# 进入ngnix-test-1容器
$ docker exec -it nginx-test-1 /bin/bash
# 进入data目录
$ root@xxxx:/# ls
$ root@xxxx:/# cd data
# 新建一个hello文件夹
$ root@xxxx:/# mkdir hello

然后启动另外一个会话进行测试。

# 进入ngnix-test-2容器
$ docker exec -it nginx-test-2 /bin/bash
# 查看data目录
$ root@xxxx:/# ls

这时候可以看到,在nginx-test-2容器的data目录也有一个hello目录。如果在该data文件夹进行所有的操作,都会自动同步到nginx-test-1容器的data目录中。

三、数据备份

数据备份方案:

  1. 创建一个容器,该容器专门用于挂载数据卷容器;
  2. 创建一个数据卷,然后把本地目录挂载到该数据卷;
  3. 将数据卷容器的内容备份到该数据卷中;
  4. 完成备份后销毁数据卷容器;

数据备份的命令格式:

$ docker run --rm --volumes-from [数据卷容器ID或名称] -v [宿主机目录]:[容器目录] [镜像名称] [备份命令]

例如:把数据卷容器中的data目录备份到宿主机的backup目录中。

# 在宿主机上创建备份目录
$ mkdir backup
# 创建备份容器,把宿主机的backup目录挂载到该容器的backup目录。
# 执行tar备份命令,把数据卷容器中的data目录进行压缩,压缩文件保存在备份容器的backup目录下中。
# 由于宿主机backup目录已经被挂载到备份容器上,因此在宿主机backup目录中也可以看到该压缩文件。
# 由于指定了--rm参数,当备份容器启动完成后,它会自动被删除掉。
$ docker run --rm --volumes-from container01 -v /home/zhongliwen/backup/:/backup/ nginx tar zcPf /backup/data.tar.gz /data
# 查看备份文件
$ ls /backup
# 解压缩文件
$ tar -zxvf data.tar.gz

执行完成后,可以发现backup目录下有一个data目录,该data目录就是数据卷容器中的data目录的备份。

四、数据还原

数据还原方案:

  1. 创建一个新的数据卷容器;
  2. 创建一个新的容器,并且挂载到数据卷容器中,同时挂载本地的备份目录作为数据卷;
  3. 将要恢复的数据解压到容器中;
  4. 销毁刚创建的容器;

数据还原的命令格式:

$ docker run --rm -itd --volumes-from [数据要恢复到的容器] -v [宿主机备份目录]:[容器备份目录] [镜像名称] [解压命令]

例如:

# 启动数据卷容器
$ docker start container01
# 进入数据卷容器
$ docker exec -it container01 bash
# 删除data目录中的数据 
root@xxx:/# rm -rf /data/*
root@xxx:/# exit
# 创建还原容器,把宿主机的backup目录挂载到该容器的backup目录
# 执行tar命令,对宿主机backup目录下的data.tar.gz文件进行解压,解压后的数据保存在还原容器的data目录
# 由于指定了--rm参数,当还原容器启动完成后,它会自动被删除掉。
docker run --rm --volumes-from container01 -v /home/zhongliwen/backup/:/backup/ nginx tar xPf /backup/data.tar.gz -C /data
# 重新进入数据卷容器中
$ docker exec -it container01 bash
# 查看data目录
root@xxx:/#  ls data

最后,可以看到数据卷容器data目录下的数据又被恢复回来了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值