目前我们公司已经把 Rails App 跑在了 Docker 中,使用 Rancher 来管理。但是像标题中说的那些有状态的服务,还没有找到很好的办法。
大家在这方面有没有什么经验?
这个问题我接触有两年了,我没什么好方法。一是用远程数据库,二是映射到物理磁盘。
映射到物理磁盘,是用 docker volume 吗?
docker volume
是的
但是这样的话,如果 container 迁移到别的机器上了,volume 不能自动迁移。
数据库独立跑啊,需要持久化的不要放 Docker Contianer 里面
起一个数据容器 b 挂到应用容器 a。如果需要备份,再起一个临时容器 c,用 volumes-from 把 b 挂到 c,不过这种做法网上一般是用 tar 备份,用 pg_dump 有些曲折。而且 rancher 能不能定时运行新容器是个问题。
也可以用 exec 对运行中的容器 a 操作。
这种持久化容器可以参照 rancher catalog 里面一些应用的 dockerfile,比如 pg
如果是 elk 集群应该就没这个问题,天生分布式的,每个节点都有 replicas.
replicas
如果你只是为了部署个测试节点来模拟多 DB 就勇敢用 docker,生产千万还是少用 docker 来运行这种吃资源的基建服务……
docker volume,但是按照现在云计算的架构,直接 RDS 不是更好,自己建数据库没意义呀。
https://docs.rancher.com/rancher/v1.2/en/rancher-services/storage-service/
差不多能解决吧