docker存储

1、docker 存储mysql

1. storage drivernginx

 

 

容器由最上面一个可写的容器层,以及若 干只读的镜像层组成,容器的数据就存放 在这些层中。这样的分层结构最大的特性 是 Copy-on-Write:web

1.新数据会直接存放在最上面的容器层。sql

2.修改现有数据会先从镜像层将数据复制 到容器层,修改后的数据直接保存在容器 层中,镜像层保持不变。docker

3.若是多个层中有命名相同的文件,用户 只能看到最上面那层中的文件。apache

分层结构使镜像和容器的建立、共享以及分发变得很是高效,而这些都要归功于 Docker storage driver安全

2.storage driver 选型架构

Docker 支持多种 storage driver,有 AUFS、Device Mapper、Btrfs、OverlayFS、VFS 和 ZFS。它们都能实现分层的架构,同时又有各自的特性。对于 Docker 用户来讲,具体 选择使用哪一个 storage driver 是一个难题,由于:app

1.没有哪一个 driver 可以适应全部的场景。工具

2.driver 自己在快速发展和迭代。

不过 Docker 官方给出了一个简单的答案:

优先使用 Linux 发行版默认的 storage driver。

2、Data Volume

 

Data Volume 本质上是 Docker Host 文件系统中的目录或文件,可以直接被 mount 到容 器的文件系统中。Data Volume 有如下特色:

1.Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。

2.容器能够读写 volume 中的数据。

3.volume 数据能够被永久的保存,即便使用它的容器已经销毁。

 

2.1 、tmpfs mount

 应用限制:

1)tmpfs挂载是临时的,而且仅保留在主机内存中。当容器中止时,将tmpfs删除安装,而且不会 保留写在那里的文件。

2)与卷和绑定装入不一样,您没法tmpfs在容器之间共享装载。

2)只有在Linux上运行Docker时才能使用此功能

# docker run -d -it --name tmptest --mount type=tmpfs,dst=/app nginx

# docker run -d -it --name tmptest1 --mount type=tmpfs,dst=/app,tmpfsmode=1660 nginx

2.2 Data Volume

 2.2.1 Data Volume 应用场景

  1.Database 软件 vs Database 数据

  2.Web 应用 vs 应用产生的日志

  3.数据分析软件 vs input/output 数据

  4.Apache Server vs 静态 HTML 文件

  5.引擎服务 vs 依赖的数据词典

相信你们会作出这样的选择:

  1.前者放在数据层中。由于这部份内容是无状态的,应该做为镜像的一部分。

  2.后者放在 Data Volume 中。这是须要持久化的数据,而且应该与镜像分开存放。

2.3 bind mount 文件

2.3.1  bind mount 能够将 host 上文件 mount 到容器

使用 bind mount 单个文件的场景是:只须要向容器添加文件,不但愿覆盖整个目录。

使用单一文件有一点要注意:host 中的源文件必需要存在,否则会看成一个新目录 bind mount 给容器。

2.3.3 bind mount 数据持久性测试

即便容器没有了,bind mount 也还在。这也合理,bind mount 是 host 文件系统中的数 据,只是借给容器用;

2.3.4 bind mount 权限控制

 

ro 设置了只读权限,在容器中是没法对 bind mount 数据进行修改的。只有 host 有权修 改数据,提升了安全性。

2.3.5 bind mount 优缺点

优势:

应用场景丰富,好比咱们能够将源代码目录 mount 到容器中,在 host 中修改代码就能看 到应用的实时效果。再好比将 mysql 容器的数据放在 bind mount 里,这样 host 能够方 便地备份和迁移数据。 bind mount 的使用直观高效,易于理解;

不足:

bind mount 须要指定 host 文件系统的特定路径,这就限制了容器的可移植性,当须要将 容器迁移到其余 host,而该 host 没有要 mount 的数据或者数据不在相同的路径时,操 做会失败。

 

 

2.4 docker managed volume

不指定 mount 源,指明 mount point 是否可行?数据又是存在哪里?

 

 

 

 

 

  2.4.1) docker managed volume 分析

     

    volume 的内容跟容器原有 /usr/local/apache2/htdocs 彻底同样,为何? 这是由于:若是 mount point 指向的是已有目录,原有数据会被复制到 volume 中。 docker managed volume 的建立过程:         1.容器启动时,简单的告诉 docker 我须要一个 volume 存放数据,帮我 mount 到目录 /xx。

        2.docker 在 /var/lib/docker/volumes 中生成一个随机目录做为 mount 源。

        3.若是 /xx 已经存在,则将数据复制到 mount 源, 4.将 volume mount 到 /xx

3、两种 data volume 比较

相同点:二者都是 host 文件系统中的某个路径。

 

 

4、 数据共享 容器与HOST

bind mount 是很是明确的:直接将要共享的目录 mount 到容器。

docker managed volume 就要麻烦点。因为 volume 位于 host 中的目录,是在容器启动 时才生成,因此须要将共享数据拷贝到 volume 中,好比:

  4.2 数据共享 容器与容器

  将 $HOME/htdocs mount 到三个 httpd 容器。

  

 

     修改 volume 中的主页文件,再次查看并确认全部容器都使用了新的数据内容?

  4.3 共享数据 之 volume container

  volume container 是专门为其余容器提供 volume 的容器。它提供的卷能够是 bind mount,也能够是 docker managed volume。

容器 mount 了两个 volume:

1.bind mount,存放 web server 的静态文件。

2.docker managed volume,存放一些实用工具

4.5 volume container 应用

volume container 的特色:

1.与 bind mount 相比,没必要为每个容器指定 host path,全部 path 都在 volume container 中定 义好了,容器只需与 volume container 关联,实现了容器与 host 的解耦。

2.使用 volume container 的容器其 mount point 是一致的,有利于配置的规范和标准化,但也带来 必定的局限,使用时须要综合考虑。

5、 Volume 生命周期

备份 由于 volume 其实是 host 文件系统中的目录和文件,因此 volume 的备份其实是对文件系统的备份。 恢复 volume 的恢复也很简单,若是数据损坏了,直接用以前备份的数据拷贝到 /myregistry 就能够了。 迁移 若是咱们想使用更新版本的 Registry,这就涉及到数据迁移,方法是:

1.docker stop 当前 Registry 容器。

2.启动新版本容器并 mount 原有 volume。

3.docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest

固然,在启用新容器前要确保新版本的默认数据路径是否发生变化。

销毁

能够删除再也不须要的 volume,但必定要确保知道本身正在作什么,volume 删除后数据是找不回来的。docker 不会销毁 bind mount,删除数据的工做只能由 host 负责。对于 docker managed volume,在执 行 docker rm 删除容器时能够带上 -v 参数,docker 会将容器使用到的 volume 一并删除,但前提是没有 其余容器 mount 该 volume,目的是保护数据,很是合理。

若是删除容器时没有带 -v 呢

 

 

 

总结:

1.docker 为容器提供了两种存储资源:数据层和 Data Volume。

2.数据层包括镜像层和容器层,由 storage driver 管理。

3.Data Volume 有两种类型:bind mount 和 docker managed volume。

4.bind mount 可实现容器与 host 之间,容器与容器之间共享数据。

5.volume container 是一种具备更好移植性的容器间数据共享方案,特别是 data-packed volume container。

6.最后咱们学习了如何备份、恢复、迁移和销毁 Data Volume。

相关文章
相关标签/搜索