用docker承载mysql

这两天部署系统到生产服务器,前端后端部署docker是毫无疑义的,但mysql呢?

答案是mysql可以部署到docker。

1、数据文件挂载到宿主机

将mysql部署于docker,会有一个担心,就是docker容器的删除非常的容易,一不小心删掉,数据就没有了。但其实,创建docker容器的时候,可以将数据文件、配置文件等挂载到宿主机,万一容器删掉,数据仍在;再次创建docker容器,仍然可以识别这些数据(但这一步我没有试)。


2023.04.25
这一步后来试了,亲测有效。不过,创建容器的脚本貌似要一模一样才行。


参考创建容器脚本:

1、下载镜像
docker pull mysql:8.0.23

2、创建容器
sudo docker run -p 3307:3306 --name mysql \
-v /fs01/KT1/mysql/mysql-files:/var/lib/mysql-files \
-v /fs01/KT1/mysql/conf:/etc/mysql \
-v /fs01/KT1/mysql/log:/var/log/mysql \
-v /fs01/KT1/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=口令 \
-d mysql:8.0.23

注意不同的mysql版本,创建脚本可能会有所不同。

2、位于另一个docker里的应用程序如何访问该mysql?

应用程序和mysql,本是同根生,但位于不同的docker,隔江相望,鸡犬相闻却始终有隔阂,怎么访问?

关键是在应用程序的配置中,这个mysql的IP是多少?127.0.0.1是不行的,因为不在一个docker里。对于docker里面的程序而言,docker就是操作系统。

此时应该找出宿主机的地址。倾向于找以太网地址。因为一台服务器,不可能开放太多端口给互联网,尤其是数据库,能不开放就不开放,所以写服务器互联网地址,不合适。

用ifconfig查看宿主机的地址,找到:
在这里插入图片描述
然后数据库连接串可以这样写:

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.122.1:3307/szdata?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong&allowPublicKeyRetrieval=true
        username: 用户名
        password: 口令 # 你的数据库密码

也有所谓docker网络,用于docker之间互访,因为不太了解,暂时还说不出什么门道。

posted on 2023-04-21 10:45  左直拳  阅读(0)  评论(0)    收藏  举报  来源

导航