image.png
image.png
在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及到容器的数据管理操作。
容器中的管理数据主要有两种方式:

  • 数据卷:容器内数据直接映射到本地主机环境
  • 数据卷容器:使用特定容器维护数据卷

    数据卷

    它将主机操作系统目录直接映射进容器。
    特点:

  • 数据卷可以在容器之间共享和重用,容器之间传递数据将变得高效与方便

  • 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
  • 对数据卷的更新不会影响镜像,解偶开应用和数据
  • 卷会一直存在,直到没有容器使用,可以安全卸载。

创建数据卷

使用volume子命令来管理数据卷
image.png
image.png

绑定数据卷

我们可以在创建容器的时候将本地主机的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
在使用docker run命令的时候,可以使用-mount选项来使用数据卷。
-mount选项支持三种类型的数据卷,包括:

  • volume 普通数据卷 映射到主机/var/lib/docker/volumes 下
  • bind 绑定数据卷 映射到主机指定路径下
  • tmpfs 临时数据卷 只存在内存中

其中bind类型的,可以使用 -v简化。
一个例子
docker run —mount type=bind,source=/webapp,destination=/opt/webapp training/webapp
等同于使用-v参数
docker run -v /webapp:/opt/webapp traning/webapp

另外本地目录的路径必须是绝对路径,容器的可以是相对路径,如果目录不存在,docker会自动创建。
挂载的数据卷默认是读写,也可以设置为只读。

数据卷容器

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

首先 创建一个创建一个数据卷容器 并在其中创建一个数据卷挂载到dbdata
docker run -it -v /dbdata —name dbdata ubuntu
可以在其它容器中使用—volume-from 来挂载dbdata容器中的数据卷 下面创建两个容器

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

注意:

  1. 可以多次使用—volume-from 从多个容器中 挂载多个数据卷 还可以从其它已经挂载了容器卷的容器来挂载数据卷

docker run -d —name db3 —volumes-from dbl training/postgres

  1. 使用 —volume-from 参数所挂载的数据卷容器自身并不需要保存在运行状态
  2. 如果删除了挂载的容器 数据卷并不会自动被删除
  3. 使用数据卷容器可以让用户在容器之间自由的升级和移动数据卷

使用数据卷容器来迁移数据