# 关于docker安装的困惑

**URL:** <https://meta.discourse.org/t/confused-about-docker-installation/160945>\
**Category:** Self-hosting\
**Created:** [2020年八月15日 01:05 UTC](https://meta.discourse.org/t/confused-about-docker-installation/160945 "2020-08-15T01:05:03Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![talkingBeat](https://avatars.discourse-cdn.com/v4/letter/t/8c91f0/32.png) [@talkingBeat](https://meta.discourse.org/u/talkingBeat)\
**Post date:** [2020年八月15日 01:05 UTC](https://meta.discourse.org/t/confused-about-docker-installation/160945/1 "2020-08-15T01:05:03Z")

</div>

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

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

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

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

1. 

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

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

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

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

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

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

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

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

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

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

---

<div class="post-metadata">

**Author:** ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)\
**Post date:** [2020年八月15日 01:11 UTC](https://meta.discourse.org/t/confused-about-docker-installation/160945/2 "2020-08-15T01:11:08Z")

</div>

> [@talkingBeat](#):
>
> 但是数据库在容器内部吗？那么对数据库的更改也会被持久化吗？

你好 @talkingBeat

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

希望这能帮到你。

---

<div class="post-metadata">

**Author:** ![RockHopper](https://avatars.discourse-cdn.com/v4/letter/r/d6d6ee/32.png) [@RockHopper](https://meta.discourse.org/u/RockHopper)\
**Post date:** [2020年八月15日 23:29 UTC](https://meta.discourse.org/t/confused-about-docker-installation/160945/3 "2020-08-15T23:29:13Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)\
**Post date:** [2020年八月16日 00:58 UTC](https://meta.discourse.org/t/confused-about-docker-installation/160945/4 "2020-08-16T00:58:02Z")

</div>

> [@RockHopper](#):
>
> 如果 Discourse 发布了新版本，我替换了 docker 文件并重新运行，数据库还会保留吗？

你好 @RockHopper，欢迎回来！

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

希望这能帮到你。
