当前位置: 首页 > news >正文

记Docker运行公共MySQL数据库供其他服务使用

在 VPS 上部署服务时,使用 Docker 或 Docker Compose 是最方便的方式之一。例如博客系统Typecho和短链接服务Shlink都要求外部数据库,如果在每个服务的 Docker Compose 中都各自启动一个 MySQL,既浪费空间,维护也更复杂。

更理想的情况是:单独运行一个公共 MySQL 容器,让所有需要数据库的服务连接到它。这样不仅节省资源,备份时也只需备份一个数据库容器即可,大大降低维护成本。

笔者以MySQL服务为例,先运行一个公共的数据库服务,并让其他容器共享使用。


1. 启动公共 MySQL 服务

以下是 MySQL 服务的 docker-compose.yml 示例

version: '3.8'services:mysql:container_name: mysqlimage: mysql:8.0restart: alwaysports:- 127.0.0.1:3306:3306environment:MYSQL_ROOT_PASSWORD: 1234567890volumes:- ./data/mysql:/var/lib/mysqlnetworks:- shared-mysqlnetworks:shared-mysql:name: shared-mysql

其中关键点是:

  • 为 MySQL 单独创建 shared-mysql 网络,方便其他服务加入该网络并访问数据库
  • 端口映射使用 127.0.0.1:3306,避免外部访问
  • 数据持久化到 ./data/mysql

执行 docker compose up -d 启动 MySQL服务。


2. 为其他应用创建独立的数据库与用户

为了安全与隔离,每个应用都应有独立的数据库与用户。以 Shlink 为例,步骤如下:

  1. 进入 MySQL 容器

    docker exec -it mysql bash
    mysql -uroot -p
    #(输入 root 密码)
    
  2. 创建数据库与用户

    CREATE DATABASE shlink;
    CREATE USER 'shlink_user'@'%' IDENTIFIED BY 'shlink';
    GRANT ALL PRIVILEGES ON shlink.* TO 'shlink_user'@'%';
    FLUSH PRIVILEGES;
    
    • 创建数据库 shlink
    • 创建用户 shlink_user,密码为 shlink
    • 为用户 shlink_user 在数据库 shlink 上授权
    • 最后退出 exit

这样就在数据库中建立起 shlink 表及用户供后续服务使用。


3. 在服务的Docker Compose中配置数据库环境变量

以笔者的 Shlink 短链接服务为例,需要在 Compose 文件中写入如下内容:

version: '3.8'services:shlink:image: shlinkio/shlink:stablecontainer_name: shlinkports:- '127.0.0.1:8080:8080'environment:- DEFAULT_DOMAIN=url.cdev.top- IS_HTTPS_ENABLED=true- GEOLITE_LICENSE_KEY=123321123321- INITIAL_API_KEY=123321- REDIRECT_STATUS_CODE=301- DB_DRIVER=mysql- DB_HOST=mysql- DB_PORT=3306- DB_USER=shlink_user- DB_PASSWORD=shlink- DB_NAME=shlinkrestart: alwaysnetworks:- shared-mysqlshlink-web-client:image: shlinkio/shlink-web-client:stablecontainer_name: shlink-web-clientports:- '127.0.0.1:8081:8080'restart: alwaysnetworks:shared-mysql:external: true

从中看到,有几个关键点:

  1. 对于需要数据库的后端服务,要加入networks: - shared-mysql ,让后端和数据库服务在同一个网络下
  2. 数据库服务的HOST直接写容器的服务名称,也就是DB_HOST=mysql
  3. 最后的networks 也需要写明external: true
  4. 其他数据库配置(库名、用户、密码)与前一步创建的保持一致即可

这样就 Shlink 就能成功连接公共 MySQL 数据库。

http://www.jsqmd.com/news/67686/

相关文章:

  • 手竿新手买什么品牌好?新手买鱼竿品牌推荐:鱼竿新手入门推荐
  • 2025年中国鱼竿十大名单 国产良心钓鱼竿品牌排行榜全解析
  • 2025年台钓竿品牌排行榜前十,中国质量好的手竿盘点
  • 2025高碳素超轻超硬鱼竿哪家好?高碳素超轻超硬鱼竿推荐
  • STM32设置为I2C从机模式(HAL库版本)转
  • 手竿什么品牌质量好?选购指南:中国手竿十大品牌,公认好用的手竿
  • STM32设置为I2C从机模式(转)
  • Linux Mint在更新内核后出现网卡未识别的问题
  • jittor和torch的爱恨情仇
  • FeatherNotes
  • XHORSE XSGA80EN Universal Smart Key 5pcs/lot – Ideal for European American Car Owners Mechanics
  • P1036 选数
  • GIT-01 Fuel Injection Drivebox Injector Tester: Universal Plugs for All Injectors + Frequency Lock
  • 虚拟机 VMware Tools 工具安装失败/缺失的问题
  • AgileConfig-1.11.0 发布:增强的权限管理
  • Windows 10 终止服务,趁微软官方下载通道还没有关闭,现在教大家如何用电脑浏览器下载。
  • CSAPP 存储器层次结构
  • WPS免费版(会员功能永久可用)
  • P1030 求先序序列
  • 2025年真空滚揉机厂家口碑排行:本地用户真实体验分享,市场上专业的滚揉机品牌优质企业盘点及核心优势详细解读
  • 第49天(中等题 数据结构)
  • 谷歌反重力 Google Antigravity 常见问题
  • windows11同时安装mysql8和mysql5.7数据库
  • 2025年午餐肉罐头机优质生产商口碑榜发布,行业内罐头机产品博锐发展迅速,实力雄厚
  • 每日反思(2025年12月8日)
  • JavaEE 和 JavaWeb的关系
  • 倍增
  • pwn入门记录
  • 2025-12-9
  • Maven 下载 Spigot 依赖失败问题排查:Could not find artifact org.spigotmc:spigot-api…