docker部署mysql的数据持久化
首先,我起初想着将 mysql 容器中的数据持久化 commit 成为一个新的镜像,但是保存后的新镜像与原镜像大小一样—— 数据没有保存,官方说 commit 操作并不会包含容器内挂载数据卷中的数据变化,所以还是老老实实卷挂载吧
"Mounts": [
{
"Type": "volume",
"Name": "f7653ab2038af841aaca0863e4c84668b3fdf0b1aaee59716adfe68012ab78d7",
"Source": "/var/lib/docker/volumes/f7653ab2038af841aaca0863e4c84668b3fdf0b1aaee59716adfe68012ab78d7/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
使用 docker inspect 查看 mysql 容器,发现默认匿名挂载 /var/lib/mysql ,而此目录确实是数据 mysql 数据目录
基于 docker 部署 mysql 的数据持久化问题 https://www.jianshu.com/p/530d00f97cbf
需要的知识
- Linux知识
- Docker
需要的工具
- FinalShell(或者其他同类工具)连接远程 Linux 服务器
- Navicat(或者其他同类工具)解析.sql脚本
服务器配置
#查看防火墙状态 firewall-cmd --state 若为开启通过 systemctl start firewalld.service 开启
[root@dinosaur ~]# firewall-cmd --state
running
#添加对外开放的端口,必要开放的是两个端口,一个80(Http端口),一个3306(mysql),自己按需求开
[root@dinosaur ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
[root@dinosaur ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
#重新加载防火墙
[root@dinosaur ~]# firewall-cmd --reload
#查看开放的端口
[root@dinosaur ~]# firewall-cmd --list-ports
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 8080/tcp 8080/udp 3306/tcp 3306/udp 9090/tcp 9090/udp
注:如果是阿里云的服务器,需要修改相应的安全组规则(就是阿里云又给我们加了一道墙)
MySQL配置
从 Docker Hub 上拉取 MySQL镜像,我用的是8版本,根据自己的需求选择镜像
#当前没有镜像
[root@dinosaur ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
#拉取镜像
[root@dinosaur ~]# docker pull mysql
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
#查看已有镜像
[root@dinosaur ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 8e85dd5c3255 5 days ago 544MB
启动 MySQL 镜像
# -d 后台运行
# -p 端口映射
# -e 环境变量(mysql 密码)
# --name 容器名称
[root@dinosaur ~]# docker run -d -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=12345xiaoyu mysql:latest
864aee23d5db3d4fc44089b79f6f4fdb9151ea11836def077b138188bd968e48
#docker ps 查看 已经启动成功
[root@dinosaur ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
864aee23d5db mysql:latest "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
#进入容器查看 ,可以正常登录
[root@dinosaur ~]# docker exec -it 864aee23d5db /bin/bash
root@864aee23d5db:/# mysql -uroot -p12345xiaoyu
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
root@864aee23d5db:/# exit
本地启动 Navicat 连接服务器的 MySQL 提供数据
建立你想要的数据并且运行sql脚本
Springboot项目打jar包
spring:
datasource:
username: root
password: 12345xiaoyu
url: jdbc:mysql://ip:3306/match
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
server:
port: 80
注意打包的时候相应的配置都需要修改,端口也需要根据需要修改,我使用的80端口
然后使用 maven 的 package 打包,最好先 clean 清理一下,让它重新编译
编写Dockerfile文件
FROM openjdk:14 #从 JDK14 镜像开始构建,这里选择你自己的 JDK 版本就好
COPY *.jar /app.jar #将当前目录下的jar包拷贝到容器内根目录的app.jar
CMD ["---server.port=80---"] #打印一下信息
EXPOSE 80 #保留80端口
ENTRYPOINT ["java","-jar","/app.jar"] #启动后执行 java -jar 命令运行 jar 包
将你打好的 jar 包与 Dockerfile 文件上传到 Linux 机器的同一目录
jar包在项目生成的target目录下
#使用docker build来构建镜像
[root@dinosaur match]# docker build -t match:1.0
Successfully built 3d57aee3424f
Successfully tagged match:1.0
#查看镜像发现已经构建成功
[root@dinosaur match]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
match 1.0 3d57aee3424f 45 seconds ago 569MB
mysql latest 8e85dd5c3255 6 days ago 544MB
openjdk 14 4ff6f9f0fa33 4 weeks ago 523MB
#运行镜像
[root@dinosaur match]# docker run -d --name match01 -p 80:80 match:1.0
99aef74f119fc61129762f3fde78120137b78c3432d488ccc21f344b78b4c398
访问
4ff6f9f0fa33 4 weeks ago 523MB
#运行镜像
[root@dinosaur match]# docker run -d --name match01 -p 80:80 match:1.0
99aef74f119fc61129762f3fde78120137b78c3432d488ccc21f344b78b4c398
### 访问
如果以上配置对了,比如数据库模块没错、连接模块没错,端口方面都没有错误的话,就可以打开浏览器访问了,我这里配置了80端口,直接输入 ip 地址即可