axelerant/db-docker
支持将数据库作为docker镜像的工具。
Requires
- composer-plugin-api: ^1.1 || ^2.0
- cypresslab/gitelephant: ^4.1
Requires (Dev)
- composer/composer: ^2.0
- overtrue/phplint: ^4.0
- phpspec/prophecy: ^1.12
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-16 03:21:18 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.json
的extra
部分中的选项。最后,值将按以下方式猜测。
镜像详细信息
默认情况下,镜像名称和标签将使用在默认选项部分中描述的方法猜测。您可以使用composer.json
中的配置中的docker-image-name
和docker-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-name
在 composer.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
作为镜像标签。
确定数据库源
支持以下数据库源:file
、lando
、ddev
和 drush
。可以使用 --db-source
选项显式指定源。如果没有指定,将使用以下规则确定源。
- 如果存在
--db-file
选项,则将源设置为file
。 - 如果存在名为
.lando.yml
的文件,则将源设置为lando
。- 作为上述规则的例外,插件会尝试检测是否在 lando 容器内运行。如果是,则将源设置为
drush
。
- 作为上述规则的例外,插件会尝试检测是否在 lando 容器内运行。如果是,则将源设置为
- 如果存在名为
.ddev
的目录,则将源设置为ddev
。- 作为上述规则的例外,插件会尝试检测是否在 DDEV 容器内运行。如果是,则将源设置为
drush
。
- 作为上述规则的例外,插件会尝试检测是否在 DDEV 容器内运行。如果是,则将源设置为
- 如果上述条件都不满足,则假设源为
drush
。
如果源是 lando
、ddev
或 drush
,则使用 drush sql:dump
命令获取 SQL 文件。如果源是 lando
或 ddev
,则将在相关容器内部执行 drush 命令,例如:lando drush ...
或 ddev drush ...
。
报告问题
如果您发现错误或改进之处,请创建一个 pull request。对于支持,请在 Axelerant Slack 的 #internal-support 频道提出请求。