当前位置: 首页 > 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.gsyq.cn/news/78219.html

相关文章:

  • 手竿新手买什么品牌好?新手买鱼竿品牌推荐:鱼竿新手入门推荐
  • 2025年台钓竿品牌排行榜前十,中国质量好的手竿盘点
  • STM32设置为I2C从机模式(转)
  • GIT-01 Fuel Injection Drivebox Injector Tester: Universal Plugs for All Injectors + Frequency Lock
  • 虚拟机 VMware Tools 工具安装失败/缺失的问题
  • 2025年午餐肉罐头机优质生产商口碑榜发布,行业内罐头机产品博锐发展迅速,实力雄厚
  • pwn入门记录
  • 2025/12/08 分享
  • 深刻理解HTTP和RPC的区别
  • linux 中 socket 文件是什么?和 socket 编程有什么关系?和 TCP/IP 协议栈又有什么关系?
  • 揭秘业务逻辑滥用:API安全中“利用游戏规则”的攻击手法
  • 放弃原容器建立新容器,保存留数据卷且映射
  • Hikvision 考勤机数据提取(3)
  • 2025年折弯机上下模实力厂家推荐榜
  • 阅读笔记四
  • 工程模拟分析软件 Abaqus 2024 免费下载安装教程(含中文版设置+ 激活步骤)
  • 2025新手买钓鱼竿指南:高性价比品牌推荐,避坑看这篇
  • 大模型应用开发LangChain框架 - yi
  • 2025年渔具实测:新款鲫鱼竿超轻硬,高性价比钓鱼竿真靠谱
  • 2025年国产鱼竿十大品牌:优选前十的口碑鱼竿盘点
  • omniinfer vllm v0.9.0整体框架图和pangu7b模型图
  • 过碳酸钠源头工厂在哪里?过碳酸钠直销厂家:含氧量高的过碳酸钠厂家推荐
  • 成膜助剂供应商推荐:实力厂家/批发商货源稳定有保障
  • 决策单调性(四边形不等式)学习笔记
  • 应用 SQLAlchemy 操作单表:以 SQLite 用户表为例的完整实战指南
  • MyBatis参数加解密
  • 基于Hadoop+数据可视化+机器学习随机森林预测算法+智能AI大模型+协同过滤推荐算法的青少年饮食习惯数据分析与可视化平台的设计与实现(精品源码+精品论文+上万材料集+答辩PPT)
  • CF1994G
  • 成膜助剂出口厂商有哪些?有出口资质的成膜助剂供应商名单推荐
  • hive ddl dml hivesql命令大全