axelerant/db-docker

支持将数据库作为docker镜像的工具。

安装: 25,752

依赖项: 0

建议者: 0

安全: 0

星标: 5

关注者: 6

分支: 3

开放问题: 5

类型:composer-plugin

v1.1.3 2022-07-15 22:32 UTC

README

将数据库作为镜像生成

简介

此工具是为Axelerant的特定流程编写的,但可以通过覆盖某些配置在一般情况下使用。默认情况下,如果您无法访问Axelerant的GitLab仓库,则无法使用此插件。您可以将其与自己的Docker镜像仓库甚至与Docker Hub一起使用。

先决条件

  • PHP的较新版本和composer的合理更新版本。与composer 1.10.1和composer 2+进行了测试。
  • Docker的较新版本。

可选要求(仅用于默认工作流程)

默认情况下,此插件使用Axelerant的Docker注册表前缀生成镜像名称。如果您在composer.json中未使用配置覆盖镜像名称,则适用以下要求。

  • 从gitorious.xyz克隆的能力。
  • 登录Axelerant的GitLab容器注册表。要验证,请运行docker login registry.gitorious.xyz。如果使用--no-push选项,则是可选的。

安装

使用composer安装到任何Drupal项目中。

composer require --dev axelerant/db-docker

使用方法

可以使用命令行或通过在composer.json文件的extra部分指定它们来指定选项。有关更多详细信息,请参阅下面的配置部分。

$ composer db-docker --help
Usage:
  db-docker [options]

Options:
  -t, --docker-tag[=DOCKER-TAG]  The Docker tag to build
  -r, --git-remote[=GIT-REMOTE]  The git remote to use to determine the image name
  -s, --db-source[=DB-SOURCE]    Source of the database ("lando", "drush", or "file")
  -f, --db-file[=DB-FILE]        The path to the database file (required if db-source is set to file)
      --no-push                  Set to not push the image after building
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  Generate a Docker image for the database.

警告:上述用法是通过运行composer db-docker --help生成的,并由composer生成。一些选项(如--no-plugins)是不兼容的。选项--no-plugins告诉composer不要加载任何插件,这意味着根本不会加载db-docker

示例

让插件猜测默认值,构建镜像,并推送。

composer db-docker

显式指定SQL文件来构建镜像。

composer db-docker --db-source=file --db-file=<filename> # The file can either be plain SQL or gzipped.

配置

插件还支持通过composer.json extra部分进行配置。

{
    "name": "drupal/site",
    // ...
    "require": {
        // ...
    },
    "require-dev": {
        // ...
        "axelerant/db-docker": "^1.0"
    },
    "extra": {
        "dbdocker": {
            "docker-image-name": "auto",
            "docker-tag": "auto",
            "docker-base": {
                "base-flavor": "bitnami",
                "image": "bitnami/mariadb:10.4",
                "user": "drupal8",
                "password": "drupal8",
                "database": "drupal8"
            },
            "git-remote": "origin",
            "db-source": "",
            "no-push": false
        }
    }
}

这些选项的工作方式与命令行中可用的选项相同。命令行上指定的选项值优先于composer.jsonextra部分中的选项。最后,值将按以下方式猜测。

镜像详细信息

默认情况下,镜像名称和标签将使用在默认选项部分中描述的方法猜测。您可以使用composer.json中的配置中的docker-image-namedocker-tag设置来覆盖这两个设置,如上所示。您还可以通过命令行指定docker-tag

基础镜像

您可以使用docker-base配置来指定构建数据库镜像要使用的基础镜像。如果未指定,则默认使用的镜像为Bitnami的MariaDB 10.4镜像,具有默认访问详细信息,与Lando的Drupal 8配方兼容。您可以将其覆盖以适应您的工作流程。

无法从命令行自定义基础镜像详细信息。它们必须通过composer.json的额外部分指定。

DDEV基础镜像

docker-base的默认值取决于base-flavor设置的值。默认情况下,base-flavor设置为bitnami,默认值如上所述。但是,如果base-flavor设置为ddev,则默认值将更改为以下内容:

{
    "extra": {
        "dbdocker": {
            "docker-base": {
                "base-flavor": "ddev",
                "image": "drud/ddev-dbserver-mariadb-10.4:v1.17.0",
                "user": "db",
                "password": "db",
                "database": "db"
            }
        }
    }
}

这些是为构建与DDEV兼容的数据库镜像所需的默认设置。

默认选项

插件会尝试猜测大多数输入值,以确保正确选择源、构建镜像和推送镜像。

确定镜像名称

可以使用上述描述的 docker-image-namecomposer.json 中指定镜像名称。如果没有指定(或设置为 "auto"),镜像名称将从 Git 仓库构建。

镜像名称基于 Git 仓库的 origin 远程确定(可以使用 --git-remote 选项覆盖)。远程 URL 应该是 Git URL(不是 HTTP URL),类型为 git@gitorious.xyz:<group>/<project>.git。为此,它会确定镜像名称 registry.gitorious.xyz/<group>/<project>/db。有关镜像标签的详细信息,请参阅下一节。

请注意,镜像名称仅针对 Axelerant Gitlab 仓库构建。如果您想使用其他 Docker 仓库(如 Docker Hub 或 Quay.io),请使用 composer.json 中的选项指定正确的名称。

确定镜像标签

除非使用 --docker-tag 选项指定,否则假设镜像标签是当前分支名称。如果当前分支是 master,则使用 latest 作为镜像标签。

确定数据库源

支持以下数据库源:filelandoddevdrush。可以使用 --db-source 选项显式指定源。如果没有指定,将使用以下规则确定源。

  • 如果存在 --db-file 选项,则将源设置为 file
  • 如果存在名为 .lando.yml 的文件,则将源设置为 lando
    • 作为上述规则的例外,插件会尝试检测是否在 lando 容器内运行。如果是,则将源设置为 drush
  • 如果存在名为 .ddev 的目录,则将源设置为 ddev
    • 作为上述规则的例外,插件会尝试检测是否在 DDEV 容器内运行。如果是,则将源设置为 drush
  • 如果上述条件都不满足,则假设源为 drush

如果源是 landoddevdrush,则使用 drush sql:dump 命令获取 SQL 文件。如果源是 landoddev,则将在相关容器内部执行 drush 命令,例如:lando drush ...ddev drush ...

报告问题

如果您发现错误或改进之处,请创建一个 pull request。对于支持,请在 Axelerant Slack 的 #internal-support 频道提出请求。