【问题标题】:Persisting a dockerized WordPress (with LAMP stack)持久化 dockerized WordPress(带有 LAMP 堆栈)
【发布时间】:2015-05-19 02:34:56
【问题描述】:

我正在努力将我的 WordPress 博客从传统设置迁移到 Docker,但是我在理解什么是保存数据的最佳方式时遇到了一些麻烦。

简而言之,我的想法是让每个博客都在自己的容器中运行(基于tutum/wordpress)。在我的测试中,我注意到如果我在博客上保存任何数据,当我提交容器时,图像不包含这些数据。据我了解,Docker 应该在提交新映像时保存容器的状态。当我在容器上运行命令或安装包时会发生这种情况,但是当我在 WordPress 中创建新帖子时却不会发生这种情况。

我已经阅读了一些关于 Docker 卷的信息,但是我不认为拥有一个单独的数据卷非常方便,因为我更喜欢将所有数据放在一个容器中,这样我可以更轻松地移动它。

我有什么遗漏吗?是什么阻止了 Docker 在 WordPress 中保存新帖子?

感谢大家的宝贵时间!

【问题讨论】:

    标签: mysql wordpress persistence docker


    【解决方案1】:

    tutum/wordpress 的 Dockerfile 基于tutum:lamp,它在/etc/mysql/var/lib/mysql 声明了一个卷。因此,如果您使用该图像,无论您喜欢与否,您都有卷。因为卷中的数据存在于联合文件系统之外,它不会被docker commit 命令保存。

    如果您真的不想使用卷,您可以编写自己的 Dockerfile 而不使用卷语句。但是,这确实不会很好地工作 - 每次您想要保存 wordpress 的状态时,您都必须提交一个新图像,该图像将建立在最后一个图像之上。除了令人讨厌和笨拙之外,您最终会达到图像中允许的最大层数。

    相反,恐怕您只需要处理数量。这并不像您想象的那么糟糕 - 您可以压缩卷目录并将其解压缩到一个新卷中。最大的优势是您可以将可变和不断变化的数据与可以单独更新和更改的应用程序代码分开。

    【讨论】:

    • 感谢您的反馈,但我不确定我是否遵循。你说tutum/wordpress 已经有卷,但是当我提交一个正在运行的容器时,什么都没有,这是为什么呢?其次,我只想提交“里程碑”,因为只要不删除容器,Docker 就不会删除数据,所以我认为我不会轻易达到层数的限制。
    • 1) 卷中的任何内容都不会被 docker 提交保存。由于数据库位于卷中,因此不会保存其状态。 2)您最多只能有 127 层,其中许多已经被图像拍摄。使用 docker commit 来保存数据是一个坏主意(tm),如果你尝试,你会后悔的:)
    • 谢谢,现在一切都清楚多了。我对文档中的术语有点困惑,它并没有真正解释卷在联合文件系统之外的含义。我找不到您的建议有任何问题,我认为我必须遵循“行业标准”。再次感谢您提供有用的反馈!
    • 没问题。我绝对不会怪你认为 docker commit 应该是一个更简单的解决方案。祝你好运!
    • 我知道我的问题可能需要它自己的线程,但是,在这种情况下,在主机上运行 MySQL 服务器是否比使用卷更有意义?我拥有一个 dockerized WordPress 的主要动力是为了安全目的隔离/沙箱各种博客。如果我也不能隔离数据库,我认为在主机上安装 MySQL 更实用。这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 2013-10-10
    • 2012-04-21
    • 1970-01-01
    • 2013-06-24
    • 2017-10-18
    • 2016-11-11
    • 2023-04-07
    相关资源
    最近更新 更多