
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
MariaDB Galera是一个多主数据库集群解决方案,支持同步复制和高可用性。Nullata MariaDB Galera镜像提供LDAP、SSL/TLS功能支持及多种操作模式,旨在为各类部署环境提供最大灵活性。
MariaDB Galera概述
商标说明:本软件列表由Nullata打包。产品中提及的相关商标归各自公司所有,使用这些商标并不意味着任何关联或背书。
consoledocker run --name mariadb \ -e ALLOW_EMPTY_PASSWORD=yes \ nullata/mariadb-galera:latest
⚠️ 警告 ⚠️:快速设置仅适用于开发环境。建议修改不安全的默认凭据,并查看配置部分的可用配置选项以实现更安全的部署。
✨ 生产环境部署请参考https://github.com/nullata/containers%E4%B8%AD%E5%90%84%E7%89%88%E6%9C%AC%E5%AF%B9%E5%BA%94%E7%9A%84Docker Compose示例配置,包括多节点配置和不同版本的推荐环境设置。
获取Nullata MariaDB Galera Docker镜像的推荐方式是从https://hub.docker.com/r/nullata/mariadb-galera%E6%8B%89%E5%8F%96%E9%A2%84%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%E3%80%82
consoledocker pull nullata/mariadb-galera:latest
如需使用特定版本,可拉取带版本标签的镜像。可在Docker Hub Registry中查看https://hub.docker.com/r/nullata/mariadb-galera/tags%E3%80%82
consoledocker pull nullata/mariadb-galera:[TAG]
如果删除容器,所有数据将丢失,下次运行镜像时数据库将重新初始化。为避免数据丢失,应挂载一个在容器删除后仍能保留的卷。
持久化需挂载目录到/nullata/mariadb路径。如果挂载的目录为空,首次运行时将自动初始化。
consoledocker run \ -e ALLOW_EMPTY_PASSWORD=yes \ -v /path/to/mariadb-persistence:/nullata/mariadb \ nullata/mariadb-galera:latest
或修改本仓库各版本目录中的docker-compose.yml文件:
yamlservices: mariadb: ... volumes: - /path/to/mariadb-persistence:/nullata/mariadb ...
使用Docker容器网络,容器内运行的MariaDB服务器可轻松被应用容器访问。同一网络中的容器可使用容器名称作为主机名进行通信。
本示例将创建一个MariaDB客户端实例,连接到与客户端在同一Docker网络上运行的服务器实例。
步骤1:创建网络
consoledocker network create app --driver bridge
步骤2:启动MariaDB服务器实例
使用--network app参数将MariaDB容器附加到app网络。
consoledocker run -d --name mariadb-galera \ -e ALLOW_EMPTY_PASSWORD=yes \ --network app \ nullata/mariadb-galera:latest
步骤3:启动MariaDB客户端实例
最后创建新容器实例以启动MariaDB客户端并连接到上一步创建的服务器:
consoledocker run -it --rm \ --network app \ nullata/mariadb-galera:latest mysql -h mariadb-galera -u root
未指定时,Docker Compose会自动创建新网络并将所有部署的服务附加到该网络。以下示例显式定义名为database的新bridge网络,假设您希望从自定义应用镜像(服务名称为myapp)连接到MariaDB服务器。
yamlversion: '2' networks: app: driver: bridge database: driver: bridge services: mariadb-galera: image: nullata/mariadb-galera:latest environment: - ALLOW_EMPTY_PASSWORD=yes networks: - database myapp: image: YOUR_APPLICATION_IMAGE networks: - app - database
使用以下命令启动容器:
consoledocker compose up -d
yamlservices: ############################################ # 单节点测试 ############################################ mariadb-single: profiles: ["test-single"] image: nullata/mariadb-galera:latest ports: - "10912:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test:/nullata/mariadb" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm:// - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes - MARIADB_GALERA_CLUSTER_NAME=test-single - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_USER=testuser - MARIADB_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot - MARIADB_DATABASE=testdb healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] interval: 15s timeout: 5s retries: 6 ############################################ # 显式全网格集群 ############################################ mariadb-node1: profiles: ["test-cluster"] image: nullata/mariadb-galera:latest ports: - "10913:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-node1:/nullata/mariadb" - "/opt/services/database/backup/nullata-galera-test:/backup" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://mariadb-node1,mariadb-node2,mariadb-node3 - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes - MARIADB_GALERA_CLUSTER_NAME=test-cluster - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot # 完全 outage 后强制重新引导: - MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP=yes healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] mariadb-node2: profiles: ["test-cluster"] image: nullata/mariadb-galera:latest ports: - "10914:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-node2:/nullata/mariadb" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://mariadb-node1,mariadb-node2,mariadb-node3 - MARIADB_GALERA_CLUSTER_NAME=test-cluster - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot depends_on: mariadb-node1: condition: service_healthy healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] mariadb-node3: profiles: ["test-cluster"] image: nullata/mariadb-galera:latest ports: - "10915:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-node3:/nullata/mariadb" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://mariadb-node1,mariadb-node2,mariadb-node3 - MARIADB_GALERA_CLUSTER_NAME=test-cluster - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot depends_on: mariadb-node1: condition: service_healthy healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] ############################################ # 主从(星形拓扑) ############################################ mariadb-seed: profiles: ["test-seed"] image: nullata/mariadb-galera:latest ports: - "10916:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-seed0:/nullata/mariadb" - "/opt/services/database/backup/nullata-galera-test:/backup" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm:// - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes - MARIADB_GALERA_CLUSTER_NAME=test-seed - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot # 完全 outage 后强制重新引导: - MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP=yes healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] mariadb-join1: profiles: ["test-seed"] image: nullata/mariadb-galera:latest ports: - "10917:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-join1:/nullata/mariadb" environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://mariadb-seed - MARIADB_GALERA_CLUSTER_NAME=test-seed - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot depends_on: mariadb-seed: condition: service_healthy healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"]
使用以下命令运行指定配置文件:
consoledocker compose --profile <profile> up -d
有关其他配置详情、环境变量、docker-compose及自行构建说明,请访问: https://github.com/nullata/containers
HARDENED-EXPERIMENTAL镜像增加了额外的安全考虑和更小的镜像尺寸,旨在减少总体***面。以下是新增改进列表:
强化镜像使用示例
yamlservices: ############################################ # 单节点测试 ############################################ mariadb-single: profiles: ["test-single"] image: nullata/mariadb-galera:12.1.2-hardened-experimental security_opt: - no-new-privileges:true cap_drop: - ALL cap_add: - CHOWN - DAC_OVERRIDE - SETGID - SETUID - NET_BIND_SERVICE ports: - "***:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test:/nullata/mariadb" # 带安全限制的临时文件系统 tmpfs: - /tmp:nosuid,nodev,size=1g,mode=1777 - /var/tmp:nosuid,nodev,size=500m,mode=1777 environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm:// - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes - MARIADB_GALERA_CLUSTER_NAME=test-single - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_USER=testuser - MARIADB_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot - MARIADB_DATABASE=testdb healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] interval: 15s timeout: 5s retries: 6 start_period: 60s # 资源限制 deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G ############################################ # 显式全网格集群 ############################################ mariadb-node1: profiles: ["test-cluster"] image: nullata/mariadb-galera:12.1.2-hardened-experimental security_opt: - no-new-privileges:true cap_drop: - ALL cap_add: - CHOWN - DAC_OVERRIDE - SETGID - SETUID - NET_BIND_SERVICE ports: - "***:3306" # 示例测试外部端口 volumes: - "/opt/services/database/nullata-galera-test-node1:/nullata/mariadb" - "/opt/services/database/backup/nullata-galera-test:/backup" tmpfs: - /tmp:nosuid,nodev,size=1g,mode=1777 - /var/tmp:nosuid,nodev,size=500m,mode=1777 environment: - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://mariadb-node1,mariadb-node2,mariadb-node3 - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes - MARIADB_GALERA_CLUSTER_NAME=test-cluster - MARIADB_GALERA_MARIABACKUP_USER=backup - MARIADB_GALERA_MARIABACKUP_PASSWORD=testpass - MARIADB_ROOT_PASSWORD=testroot - MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP=yes healthcheck: test: ["CMD", "/opt/nullata/scripts/mariadb-galera/healthcheck.sh"] interval: 15s timeout: 5s retries: 6 start_period: 60s deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G mariadb-node2: profiles: ["test-cluster"] image: nullata/mariadb-galera:12.1.2-hardened-experimental security_opt: - no-new-privileges:true cap_drop: - ALL cap_add: - CHOWN - DAC_OVERRIDE
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务