Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    Docker 社区(不是 Drupal 社区或 Drupal 安全团队)

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 Drupal?

Drupal 是一个用 PHP 编写的免费开源内容管理框架,根据 GNU 通用公共许可证分发。它被用作全球至少 2.1%的所有网站的后端框架,从个人博客到企业、政治和政府网站,包括 WhiteHouse.gov 和 data.gov.uk。它还用于知识管理和业务协作。

wikipedia.org/wiki/Drupal (该内容为英文网址,在中文语境中一般保留原样)

logo

如何使用此图像

启动 drupal 实例的基本模式为:

$ docker run --name some-drupal -d drupal

如果您希望能够从主机访问实例而无需容器的 IP,可以使用标准端口映射:

$ docker run --name some-drupal -p 8080:80 -d drupal

然后,在浏览器中通过 http://localhost:8080http://host-ip:8080 进行访问。

此镜像支持多种数据库类型,通过 Docker 网络使用最为便捷。在默认配置中,可使用 SQLite 以避免使用第二个容器并写入平面文件。接下来会有针对不同(更适用于生产环境)的数据库类型的更详细说明。

当首次访问此映像提供的网络服务器时,它将经历一个简短的设置过程。以下提供的详细信息专门针对该配置过程中“设置数据库”的步骤。

MySQL (该词通常不进行翻译,直接保留原样) ,若按照字面意思翻译为:“我的 SQL” ,但在实际应用中,MySQL 作为一种数据库管理系统,一般直接使用其英文名称,所以这里给出两种可能的翻译供您参考

对于将 Drupal 与 MySQL 数据库一起使用,您需要运行一个 MySQL 容器,并使用环境变量为 MYSQL_DATABASEMYSQL_USERMYSQL_PASSWORDMYSQL_ROOT_PASSWORD 对其进行配置

$ docker run -d --name some-mysql --network some-network \
    -e MYSQL_DATABASE=drupal \
    -e MYSQL_USER=user \
    -e MYSQL_PASSWORD=password \
    -e MYSQL_ROOT_PASSWORD=password \
mysql:5.7

在 Drupal 网络安装演练的“设置数据库”步骤中,输入您提供的环境变量的值

  • 数据库名称/用户名/密码: <details for accessing your MySQL instance>MYSQL_USERMYSQL_PASSWORDMYSQL_DATABASE ;有关 mysql ,请参阅说明中的环境变量)
  • 高级选项;数据库主机: some-mysql (同一 Docker 网络上的容器可通过其容器名称进行路由)

PostgreSQL(该词通常不进行逐字翻译,直接保留原样)

对于将 Drupal 与 PostgreSQL 数据库一起使用,您需要运行一个 Postgres 容器,并使用环境变量为 POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD 对其进行配置

$ docker run -d --name some-postgres --network some-network \
    -e POSTGRES_DB=drupal \
    -e POSTGRES_USER=user \
    -e POSTGRES_PASSWORD=pass \
postgres:11

在 Drupal 网络安装演练的“设置数据库”步骤中,输入您提供的环境变量的值

  • 数据库类型: PostgreSQL
  • 数据库名称/用户名/密码: <details for accessing your PostgreSQL instance>POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DB ;有关 postgres ,请参阅说明中的环境变量)
  • 高级选项;数据库主机: some-postgres (同一 Docker 网络上的容器可通过其容器名称进行路由)

卷;册;体积;容量(根据具体语境选择合适的释义)

默认情况下,此映像不包含任何卷。在 docker-library/drupal#3 中有很多关于此主题的良好讨论,绝对值得一读。

存在一种共识,即 /var/www/html/modules/var/www/html/profiles/var/www/html/themes 通常应该是卷(并且在对此映像的未来更新中可能会有明确的 VOLUME 声明),但对 /var/www/html/sites 的处理则稍微复杂一些,因为该目录的内容确实需要用映像中的内容进行初始化。

如果使用绑定挂载,完成预先填充本地 sites 目录的一种方法可能如下:

$ docker run --rm drupal tar -cC /var/www/html/sites . | tar -xC /path/on/host/sites

然后,这可以被绑定挂载到一个新的容器中:

$ docker run --name some-drupal --network some-network -d \
    -v /path/on/host/modules:/var/www/html/modules \
    -v /path/on/host/profiles:/var/www/html/profiles \
    -v /path/on/host/sites:/var/www/html/sites \
    -v /path/on/host/themes:/var/www/html/themes \
    drupal

另一种使用 Docker 卷的解决方案:

$ docker volume create drupal-sites
$ docker run --rm -v drupal-sites:/temporary/sites drupal cp -aRT /var/www/html/sites /temporary/sites
$ docker run --name some-drupal --network some-network -d \
    -v drupal-modules:/var/www/html/modules \
    -v drupal-profiles:/var/www/html/profiles \
    -v drupal-sites:/var/www/html/sites \
    -v drupal-themes:/var/www/html/themes \
    drupal

...通过 docker-composedocker stack deploy

示例 docker-compose.yml 用于 drupal

# Drupal with PostgreSQL
#
# Access via "http://localhost:8080"
#   (or "http://$(docker-machine ip):8080" if using docker-machine)
#
# During initial Drupal setup,
# Database type: PostgreSQL
# Database name: postgres
# Database username: postgres
# Database password: example
# ADVANCED OPTIONS; Database host: postgres

version: '3.1'

services:

  drupal:
    image: drupal:10-apache
    ports:
      - 8080:80
    volumes:
      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      # this takes advantage of the feature in Docker that a new anonymous
      # volume (which is what we're creating here) will be initialized with the
      # existing content of the image at the same location
      - /var/www/html/sites
    restart: always

  postgres:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: example
    restart: always

Try in PWD

运行 docker stack deploy -c stack.yml drupal (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080http://localhost:8080http://host-ip:8080 (视情况而定)。安装时,选择 postgres 作为数据库,并使用以下参数: dbname=postgres user=postgres pass=example hostname=postgres

添加额外的库/扩展

此图像未提供任何额外的 PHP 扩展或其他库,即使流行的插件需要它们。存在无数可能的插件,它们可能需要 PHP 支持的任何扩展。包含所有现有的 PHP 扩展会极大地增加图像大小。

如果您需要其他 PHP 扩展,您需要创建自己的映像来替代此映像。 php 映像的文档说明了如何编译其他扩展。此外, drupal:7 Dockerfile 中有这样做的示例。

以下 Docker Hub 功能可帮助您完成使依赖镜像保持最新的任务:

  • 自动化构建使 Docker Hub 在您每次向 Dockerfile 推送更改时自动构建它。

以任意用户身份运行

请参阅 php 图像文档中“以任意用户身份运行”部分。

图像变体

drupal 图像有多种类型,每种都针对特定的用例而设计。

drupal:<version>

这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。

其中一些标签的名称可能包含诸如“书虫”或“靶心”之类的名称。这些是 Debian 发行版的套件代号,表明该映像基于哪个发行版。如果您的映像需要安装除映像自带的软件包之外的任何其他软件包,您可能需要明确指定其中之一,以在 Debian 有新发行版时最大程度地减少损坏。

drupal:<version>-fpm

此变体包含 PHP-FPM,它是 PHP 的一种 FastCGI 实现。有关 PHP-FPM 的更多信息,请访问 PHP-FPM 网站。

为了使用此图像变体,将需要某种反向代理(例如 NGINX、Apache 或其他支持 FastCGI 协议的工具)。

一些潜在的有用资源:

警告:FastCGI 协议本质上是信任的,因此在私有容器网络之外暴露是极其不安全的——除非您确切知道自己在做什么(并且愿意承担极大的风险),否则不要将 Docker 的 --publish-p )标志与此图像变体一起使用。

许可证

查看此映像中所包含软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 drupal/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。