Docker管理容器数据

docker在容器中管理数据主要有两种方式:

- 数据卷(Volumes)

- 挂载主机目录(Bind mounts)

数据卷 为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合 文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

1.数据卷可以在容器之间共享和重用

2.对数据卷的修改会立马生效

3.对数据 的更新,不会影响镜像 数据卷

4.默认会一直存在,即使容器被删除

5.数据卷的目的是持久化数据,独立于容器的生命周期。Docker因此不会自动删除卷,当你删除一个容器,也不会“垃圾回收”直到没有容器再使用。

创建数据卷

docker volume create my-vol

或者创建数据库并且运行起来

你可以在docker run时加上-v参数来添加一个数据卷,-v参数也可以使用多次,以挂载多个数据卷。

docker run -d -P --name web -v /webapp training/webapp python app.py

这条命令将在容器中的/webapp文件夹创建一个数据卷存储数据。

你也可以在构建镜像时在Dockerfile里面定义。

查找数据卷路径用docker inspect命令定位

docker inspect web

我们可以看到保存在主机上数据卷的路径:

...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]

... 并切看到权限RW是ture

查看所有数据卷

docker volume ls

删除一个volume

docker volume rm my-vol

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动 删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷 可能会占据很多空间,所以要及时删除

挂载数据卷

在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷 。

docker run -itd \
--name 容器名字 \
--mount source=数据卷名称,target=容器中的对应目录 \
镜像名称

最好是通过run而非create/start创建启动容器,create/start命令创建启动容器后,再挂载数据卷 相当麻烦,要修改很多配置文件,但并非不可以 docker volume create my-vol docker volume ls docker volume inspect my-vol docker volume rm my-vol docker run -itd \ --name 容器名字 \ --mount source=数据卷名称,target=容器中的对应目录 \ 镜像名称 加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行 输入,直到读到结束符,如回车 如果数据卷不存在,docker会自动创建 如果容器上目录不存在, docker会自动创建

挂载目录

docker run -itd \
--name 容器名字 \
--mount type=bind,source=宿主机目录,target=容器中的对应目录 \
镜像名称

数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

创建数据卷容器

docker run -itd --name name -v dir centos

挂载数据卷容器

docker run -itd --name name --volumes-from db_data centos

备份、存储、移动数据卷

另一个非常有用大功能是利用数据卷容器进行备份、存储以及迁移操作。

$ docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

然后新创建一个新的容器

$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后解压数据卷挂载到容器

$ docker run --volumes-from dbdata2 -v $(pwd):/backup ubuntu cd /dbdata && tar xvf /backup/backup.tar

恢复

 然后新创建一个新的容器

$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

创建另一个容器,挂载 dbdata2 的容器,并使用 untar 解压备份文件到挂载的容器卷中。

$ sudo docker run --volumes-from dbdata3 -v $(pwd):/backup busybox tar xvf
/backup/backup.tar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值