SpingBoot微服务打包成Docker镜像,并连接数据库

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 地址即可
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大恐龙的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值