0. 概述

在 Docker 中,容器因为可能随时被删除,所以如果想要持久化数据,那么 Volume 是一个比较合适的选择,在 Docker 中有两种 Volume,分别是 bind volume 和 mount volume,这里我将对他们进行简单对比。

1. Mount Volume

其实,所谓的 Mount Volume 就是平时我们值行 docker run 的时候指定的 -v 参数:

  1. [root@liqiang.io]# docker run --rm -v /home/liuliqiang/config/nginx/liqiang.io:/etc/nginx/ lukelau/nginx:v0.0.1

例如,我这里就 host 中的 /home/liuliqiang/config/nginx/liqiang.io 和容器中的 /etc/nginx 目录绑定,如果原本 /etc/nginx 中有数据,那么将会被覆盖。

这种方式很简单,但是,缺点就是不可跨平台移植,假设你要从你的 Linux 机器将数据迁移到另外一台 Linux 机器上,那么直接拷贝目录是 OK 的;但是,如果要从 Linux 拷贝到 Mac/Win 下,那就未必行得通了,或者不能简单得做到。

2. Bind Volume

另外一种方式就是通过 Docker 的 Volume 管理器创建一个 Volume,然后挂载到 Container 中:

  1. [root@liqiang.io]# docker volume create nginx
  2. [root@liqiang.io]# docker run --rm -v nginx:/etc/nginx/ lukelau/nginx:v0.0.1

这样,所有的 /etc/nginx 中的数据就被保存到了 Docker 管理的名为 nginx 的 Volume 中了。在 host 中,这个 Volume 的真实数据被存放在:/var/lib/docker/volumes/nginx/_data 目录下。

通过 Bind Volume 来使用的好处就是支持跨平台迁移,因为数据都是 Docker 管理的,所以可以很方便地从一个平台迁移到另外一个平台;同时,因为 Volume 是 Docker 管理的,所以底层的存储可以不是 host 的本地存储,你可以对接一些分布式存储。

3. Ref