大家好。
这是我一直想知道但找不到明确答案的琐碎问题,因此在此提问。
对于仅限 Web 的容器,如何制作和使用一个镜像,让这些容器共享?
这肯定有意义——这种“精简”的 discourse 容器,将所有东西都放在外面(尤其是在穷人预算有限的 XS 虚拟机上),每个容器都有自己的 Docker 镜像……在我看来没有意义,对吧?
我希望我没有错过关于这种简单(和常见/流行?)场景的“明显”文档/操作指南?
非常感谢。
大家好。
这是我一直想知道但找不到明确答案的琐碎问题,因此在此提问。
对于仅限 Web 的容器,如何制作和使用一个镜像,让这些容器共享?
这肯定有意义——这种“精简”的 discourse 容器,将所有东西都放在外面(尤其是在穷人预算有限的 XS 虚拟机上),每个容器都有自己的 Docker 镜像……在我看来没有意义,对吧?
我希望我没有错过关于这种简单(和常见/流行?)场景的“明显”文档/操作指南?
非常感谢。
是的,您可以使用单个 PostgreSQL 来托管多个 Discourse 站点,但除非您打算使用多站点(请参阅 https://meta.discourse.org/t/multisite-configuration-with-docker/14084),否则每个站点都需要自己的 Redis。
您需要创建一个额外的数据库,并将第二个 Web 容器配置为使用该数据库,而不是名为 Discourse 的数据库。
感谢您抽出宝贵时间尝试,但是……这并不是我想要的。
我再试一次,如果我再次失败,请原谅我。
当我:
- $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/a.forum.xyz latest d7a7b6509811 2小时前 4.19GB
每次运行不同的/新的论坛的launcher时都会发生这种情况。
所以,我最终得到了多个相同的discourse镜像——只有我这样,结果应该是不同的吗?
如果不是只有我,并且这是期望的、预期的结果,那么——当然我不是开发人员,对所涉及的过程一无所知——这相当浪费(特别是对于仅限 Web 容器)——是吗?
我当初尝试 discourse 时希望的是,几乎所有其他dockerized软件所做的,即——获取一个镜像并从中运行多个容器。discourse不能/不具备这样做吗?
如果您想为不同的站点使用相同的容器但具有不同的设置,您可以执行以下操作:
./launcher start-cmd
以获取启动它的参数。您可以为要运行的其他站点更改它们。您仍然需要为每个站点一个数据库和一个 Redis。
它包含您网站主题的唯一副本,其中包括 JS、CSS 和其他类型的资源。
还包括您的插件及其依赖项的唯一组合。
这其中有很长的历史,但 Discourse 和大多数工具都比 Docker compose 等工具出现得早。
我们提供一个包含所有内容的“大”容器,这其中有几个权衡。其中一点是,有状态容器支持我们基于 Web 的一键更新等功能。
从今天容器通常部署的更现代的方法来看,这确实是一个很大的差异。这在 Discourse 能否发布不需要引导的频繁 Docker 镜像? 中有详细讨论,值得一读。
最终,我们目前的现状对于那些只有一点点技术倾向,能够复制和粘贴 SSH 会话中的命令并配置 DNS,但不是 Linux 容器大师的人来说效果很好。
至于那些 Linux 容器黑带高手,我们可以告诉他们,他们可以获取那个引导过的镜像,将其推送到注册中心,并在他们喜欢的容器编排软件上重新使用它。
然而,介于上述两种用户画像之间的人,他们感受到的痛苦最大。
我在那个操作指南中没有找到关于如何为多个实例使用一个 Redis 的解释,但当多站点配置可用时,这似乎是开箱即用的?
我的理解正确吗?
a) 多站点运行相同的 Docker 镜像来托管多个论坛,使用一个 Redis 和一个 Postgres 服务器。
b) 使用一个 Redis 来托管多个 Discourse 实例(无论是否使用相同的镜像)是不可能的,因为在不启用多站点的情况下,不会向 Redis 键添加前缀。
c) 没有其他方法可以强制添加 Redis 键前缀。
d) 强制为不同的 Discourse 镜像添加不同的 Redis 键前缀将允许使用一个 Redis 服务器。
e) 对强制添加通用 Redis 前缀的通用支持需要进行一些核心更改。