数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映
射进容器
-v标记在容器内创建一个数据卷
加载主机的/ src/webapp目录到容器的/ opt/webapp目录。

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp

docker 如何切换root账号 docker data-root_docker


Docker挂载数据卷的默认权限是读写(rw),只需加一个ro指定为

只读即可:

# docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp

数据卷容器

如果我们需要在多个容器之间共享一些持续更新的数据,最简单的方式
是使用数据卷容器。
创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/
dbdata目录

docker run -it -v /dbdata --name dbdata ubuntu

然后,可以在其他容器中使用–volumes-from来挂载dbdata容器中的数据
卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:

# docker run -it --volumes-from dbdata --name db1 ubuntu
# docker run -it --volumes-from dbdata --name db2 ubuntu

docker 如何切换root账号 docker data-root_ubuntu_02


容器db1和db2都挂载同一个数据卷到相同的/ dbdata目录。三个容

器任何一方在该目录下的写入,其他容器都可以看到。实验一下

我先加数据卷容器的数据卷里建立了一个test文件

docker 如何切换root账号 docker data-root_docker_03


在db1查看它是否存在

docker 如何切换root账号 docker data-root_docker_04


存在!实验成功。

利用数据卷容器来迁移数据
先备份

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

这个命令稍微有点复杂,具体分析一下。

  1. 利用ubuntu镜像创建一个容器worker。
  2. 使用–volumes-from dbdata参数来让worker容器挂载dbdata容
    器的数据卷(即dbdata数据卷);
  3. 使用-v$(pwd):/backup参数来挂载本地的当
    前目录到worker容器的/backup目录。
  4. worker容器启动后,使用了tar cvf/backup/backup.tar/dbdata命令来将/
    dbdata下内容备份为容器内的/ backup/backup.tar,即宿主主机当前目录下的backup.tar。
    但是当我这样运行出现了

docker 如何切换root账号 docker data-root_docker_05


路径出现了问题,采用绝对路径应该加一个大写的P,在cvf中加个P即可。

运行。

docker 如何切换root账号 docker data-root_docker 如何切换root账号_06


恢复数据

首先创建一个带有数据卷的容器dbdata2:

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

然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文

件到所挂载的容器卷中:

$ docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvfP

/backup/backup.tar