关于docker安装的困惑

我今天查看了 Discourse 可用的 Docker 镜像,有几个问题想请教:

  1. 在两个镜像中,我都看到它们列出了会安装 Discourse(这很明显)。随后还列出了让一切正常运行所需的步骤,主要是域名和电子邮件配置。

我对数据库感到困惑。文档中没有配置数据库的步骤。Postgres(或其他)数据库是否包含在同一个镜像中?Redis 呢?还是说这完全是可选的?

在 Docker 镜像所包含的内容列表中,并没有列出数据库。

我在工作中使用 Docker 进行开发、测试和生产部署。
我们的容器是不可变的。
当我们需要升级并推送新镜像时,它会从 Git 获取最新代码,然后自动部署。

我们绝不会在容器内进行任何更改,或者至少不会进行任何预期能持续到下一次推送之后的更改。

例如,当我们希望升级到更新版本的 .NET 时,只需修改基础镜像并推送即可。

阅读关于 Discourse Docker 镜像的资料时,我发现其中似乎对镜像内容进行了修改,就像常规安装一样。这些对镜像的修改是 meant to be persisted(旨在持久化)吗?

我最初读到这部分时,以为所有内容都存储在数据库中。但随后我意识到数据库是否在容器内部?那么对数据库的修改也会被持久化吗?

如果是这样,当我停止容器再重新启动时,如何确保所有更改都被保存?

第二个也是更重要的问题是:这对升级到论坛软件的新版本有何影响?

从我所读到的内容来看,似乎是使用容器内的实例对软件自身进行更新。而我原本期望的是:推送一个包含更新的新镜像,一切就会自动完成。

我想主要是因为我习惯于将 Docker 镜像视为“牲畜”:它们会死亡,会被重新推送,镜像本身永远不会被持久化修改。

我之前并不知道 Docker 镜像会持久化那些超过下次重启后仍有效的更改。

你好 @talkingBeat

数据库是挂载在 Docker 容器外部的卷中的,因此它是持久化的。

希望这能帮到你。

这说得通。如果 Discourse 发布了新版本,我替换了 Docker 文件并重新运行,数据库还会保留吗?

那些自定义修改过的文件,或者添加/删除了文件的情况会怎样?

你好 @RockHopper,欢迎回来!

Discourse 的启动脚本会自动为你完成所有这些操作;这完全得到本站 meta 团队的支持。

希望这能帮到你。