在 Docker 中 不使用 NFS 或 gluster 的持久化分布式文件系统解决方案

注:该文的作者为 Lucas Carlson ,本文的原文

在云上处理上传的内容

在云上运行 CMS 或者 blog 最困难的一部分是文件系统持久化。如果你以前已经在 Docker 或者是其他的 PaaS 平台上运行过 WordPress 或者是 Drupal,那你肯定知道我正在谈论的。每个容器或者是 dyno 是短暂的(当容器消失的时候,随着消失)并且当 dyno 消失的时候,所有你上传的内容也消失了。

使用 NFS 或者 GLUSTER 同步 DOCKER

你不是非常轻易的使用 NFS 或者 GLUSTER,下面是教程,并且甚至在索引中的一些容器说他们管用,但是在最新版的 Docker 中,我不能使用它们中的任何一个,

即使理论上你能在 Docker 中运行 NFS 或者是 GLUSTER,但是你真的想这样做?这些技术没有问题?是否需要 kernel 补丁 或者 开放TCP 端口,这是一回事,这绝不容易。

如果你可以使用一个不需要打内核补丁或者是开放 TCP 端口的同步技术,那是不是非常的棒?像 Dropbox,但是没有中央服务器,因此不不用担心你的代码被损坏。

使用 BITTORRENT SYNC 同步 Docker

尽管 BitTorrent Sync 不是开源的,但是它是没有成本的,并且在没有中央服务器的情况下工作的非常好

一个新的开源的项目 Syncthing 是 BitTorrent Sync 的替代方案,但是因为它还不是稳定版本,我们将给你演示当它变成稳定版本的时候我们怎么使用它。

这里是你怎样把 syncing 加入你的 Docker app:

# Server 1
$ docker run -d --name btsync ctlc/btsync 
90ecd4
$ docker logs 90ecd4
Starting btsync with secret: A645YG2WBR4DJI7J67ZK2EKD7XT44SYJ6
$ docker run -i -t --volumes-from btsync ubuntu bash
root@2ff9f0194ac0:/# ls /data/
root@2ff9f0194ac0:/# touch /data/hello_world
root@2ff9f0194ac0:/# ls /data/
hello_world

在另外一台电脑,你可以通过你第一个示例的秘钥来运行 ctlc/btsync 容器。

# Server 2
$ docker run -d --name btsync-client ctlc/btsync A645YG2WBR4DJI7J67ZK2EKD7XT44SYJ6
16e0e4
$ docker logs 16e0e4
Starting btsync with secret: A645YG2WBR4DJI7J67ZK2EKD7XT44SYJ6
$ docker run -i -t --volumes-from btsync-client ubuntu bash
root@3053efa3c41f:/# ls /data/
hello_world

你仅仅需要在每个虚拟服务上运行一个 ctlc/btsync 容器,你可以通过使用 --volume-from 命令来绑定容器的卷来运行许多容器,你的所有的容器都可以通过这样的方式在本地和通过系统来共享他们的短暂的数据。

总结

如果你组合 BitTorrent Sync 和 Docker,你可以不通过调试 NFS 或者是同一个 rsync 方案拼凑来创建一个有效而又强大的方案解决文件系统的持久化问题。

纯数据卷对于单机来说是一个非常棒的文件系统分享解决方案,但是当你想构建多主机应用时,使用如上的解决方案是一个简洁的可扩展方案。

    原文作者:yexiaobai
    原文地址: https://segmentfault.com/a/1190000000532191
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞