这两天部署系统到生产服务器,前端后端部署docker是毫无疑义的,但mysql呢?
答案是mysql可以部署到docker。
1、数据文件挂载到宿主机
将mysql部署于docker,会有一个担心,就是docker容器的删除非常的容易,一不小心删掉,数据就没有了。但其实,创建docker容器的时候,可以将数据文件、配置文件等挂载到宿主机,万一容器删掉,数据仍在;再次创建docker容器,仍然可以识别这些数据(但这一步我没有试)。
参考创建容器脚本:
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之间互访,因为不太了解,暂时还说不出什么门道。