【问题标题】:Docker and Drupal 8 - settings.phpDocker 和 Drupal 8 - settings.php
【发布时间】:2016-03-06 01:02:15
【问题描述】:

我正在尝试对 Drupal 8 进行 docker 化,我遇到了这个问题,在容器中运行 Drupal 8 并安装它之后,如果我删除容器并重新启动它,它会提示再次安装它。

问题是,当安装 Drupal 时,会创建一个包含数据库详细信息的 settings.php 文件。

我想创建一个 systemd 单元文件,以一种智能的方式启动 Drupal 8 容器,即使它被删除,它也应该在下次使用相同的安装时重新启动。

有人建议我写一个带有ConditionPathExists=的systemd单元文件,根据它是否在本地挂载settings.php,但是我认为这不会完全起作用,因为在容器中安装时,生成的@987654324 @ 文件不会被持久化回主机。

那么,我该如何解决为 Drupal 制作一个 Docker 容器的问题,如果它还没有安装,它会提供安装,然后从那时起使用已安装的实例,即使容器被移除并重建?

【问题讨论】:

    标签: drupal docker systemd


    【解决方案1】:

    我强烈推荐使用 drupal 的官方 docker 镜像

    节省大量时间,如果您仍需要自定义环境,至少您可以查看其 Dockerfile 并了解社区是如何完成的。

    容器持久化

    当容器停止时,它可以重新启动。它的所有文件都被保留,包括可能已创建的任何 settings.php 文件。

    另一方面,全新的容器总是从头开始,没有简单的方法可以避免这种情况。要跨容器实例持久化数据,您需要使用卷。

    https://docs.docker.com/engine/userguide/containers/dockervolumes/

    这是如何完成的:

    #
    # Create a data container
    #
    docker create \
      -v /var/www/html/sites \
      -v /var/www/private \
      --name my-data \
      drupal
    
    #
    # Run drupal without a db container (select sqlite on first install)
    #
    docker run --volumes-from my-data --name my-drupal -p 8080:80 -d drupal
    

    注意:

    • 您可以使用卷映射到主机,但这种数据容器模式更加灵活,例如在升级 drupal 时。

    工作原理

    Drupal 8 建立在官方 PHP 语言镜像之上。

    在 PHP 构建文件中注意 Apache 是如何在 foreground 中运行的?

    CMD ["apache2-foreground"]
    

    不需要在容器内运行 systemd。

    【讨论】:

    • 这似乎违反了一般建议的 systemd 单元文件模式,我在任何地方都看到你创建容器并在停止它时将其删除,以便为升级容器腾出空间;以您的示例为例,我不确定如何升级。此外,我担心包含settings.php 的文件夹还包含其他版本文件;所以我想我不能只挂载一个甚至还不存在的主机卷,因为那个重要的文件夹会在容器中显得完全空,不是吗?
    • @AttilaSzeremi 在上述模式中,容器数据保存在名为“my-data”的容器中。升级很简单,杀死名为“my-drupal”的容器,执行新的 docker pull(获取最新的 drupal 映像)然后启动一个新容器。至于包含难以避免的版本文件的文件夹,并且特定于 Drupal 如何真正管理其文件。这就是为什么通过将内容保存在“站点”目录中来缓解问题的原因。
    • @AttilaSzeremi 在容器中运行 systemd 不会管理容器实例,而是由 docker 守护进程执行此操作。应该注意的是,使用 systemd 作为 Docker 守护程序的替代品是一个有争议的主题,但目前用户无法控制。有关 Docker 未来的一瞥,请参阅:containerd.tools
    • systemd 的东西正在主机中运行,我知道。但是无论如何,对于您的示例,最初无法安装 Drupal,因为我会将空目录映射到 Drupal 中包含重要安装文件的目录(例如,它用于创建 settings.php 的基本设置文件)
    • @AttilaSzeremi 你试过我的例子吗?运行标准安装后,设置文件会在站点目录中生成,该目录是持久卷之一:“/var/www/html/sites/default/settings.php”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多