Docker-14-数据卷容器

数据卷容器就是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用,所谓的数据卷容器,实际上就是一个普通的容器.

创建数据卷容器

命令如下:

1
docker run -tid -v /usr/share/nginx/html/ --name mydata ubuntu

就是运行了一个ubuntu容器,然后挂载了/usr/share/nginx/html/这个目录

引用容器

使用如下命令引用数据卷容器:

1
2
3
docker run -tid --volumes-from mydata -p 80:80 --name nginx1 nginx  

docker run -tid --volumes-from mydata -p 81:80 --name nginx2 nginx

image

执行完毕后,刚刚运行的两个nginx容器就都挂载了同一个数据卷到usr/share/nginx/html/目录下面,三个容器中,任意一个修改了该目录下的文件,其他两个都能看到变化

可以用docker inspect命令去查看这三个容器的详情,关于数据卷的部分如下:
image

image

image

从图中可以看到,三个容器的数据卷的描述都是一致的

注意事项

这里有几点需要注意的地方

  • 可以多次使用--volumes-from参数来从多个容器挂载多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷.
  • 使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态
  • 如果删除了挂载的容器(包括mydata、nginx1和nginx2),数据卷并不会被自动删除.如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器.

数据备份

利用数据卷容器可以实现数据的备份与恢复,备份命令如下:

1
docker run  mydata --name worker --privileged=true -v /usr/docker/backup/:/backup/ ubuntu tar cvf /backup/backup.tar /usr/share/nginx/html/

  • --volumes-from 连接待备份的容器
  • -v 用来挂载数据卷到容器的/backup/目录下面
  • 最后是个tar命令,将容器中/usr/share/nginx/html目录下的内容备份到/backup目录下的backup.tar文件中,由于
    已经设置将宿主机的/usr/docker/backup/目录映射到容器的/backup目录,因为备份在容器/backup目录下的压缩文件在当前目录下可以立马看到

执行如下:
image

可以看到backup.tar就有了已经,然后打开其实就是/usr/share/nginx/html目录及内容,至此备份就完成了

数据恢复

步骤如下

创建容器

首先需要创建一个容器,这个容器就是要使用恢复的数据的容器,这里就再创建一个nginx容器了,命令如下:

1
docker run -itd -p 82:80 -v /usr/share/nginx/html/ --name nginx3 nginx

容器名称是nginx3,然后挂载了一个数据卷

恢复

创建一个临时容器,如下:

1
docker run --volumes-from nginx3 -v $(pwd):/backup nginx tar xvf /backup/backup.tar

  • 首先还是使用--volumes-from参数连接上备份容器,即第一步创建出来的nginx3.
  • 然后将当前目录映射到容器的/backup目录下.
  • 然后执行解压操作,将backup.tar文件解压.解压文件位置描述是一个容器内的地址,但是该地址已经映
    射到宿主机中的当前目录了,因此这里要解压缩的文件实际上就是宿主机当前目录下的文件.

image

至此,数据恢复就完成了