文档章节

Spring boot在Docker中以JPA方式连接Mysql

亚林瓜子
 亚林瓜子
发布于 2018/11/09 17:40
字数 1042
阅读 409
收藏 2

背景

最近在了解Docker的使用,发现docker在集群部署方面和运维方面有比较大的优势,通过统一的依赖关系,以镜像的方式,将已经打好包的镜像文件,部署到各个节点。 如果不用考虑集群的同学,就不用折腾这个,如果想要让应用,有较强的快速部署的能力可以考虑考虑。

目标

在本机创建两个docker容器,分别为mysql的容器和spring boot的容器。spring boot容器通过jpa方式访问mysql容器里面的数据库。

步骤

假设你已经在本地安装好了docker

安装mysql镜像

docker pull mysql/mysql-server:latest

检查镜像

docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mysql/mysql-server   latest              a02eab9e2434        2 weeks ago         276MB

mysql容器

创建mysql容器

这里在创建mysql容器的同时,也创建了mysql的实例:

docker run --name mysql -p 3306:3306 -d mysql/mysql-server:latest
  • --name:是设置容器名称;
  • -p:设置docker容器对外映射的端口,以及容器使用的端口;
  • -d:设置容器在后台运行的方式
  • mysql/mysql-server:latest:这是之前安装的mysql镜像

准备mysql

查看安装root密码

docker logs mysql 2>&1 | grep GENERATED
[Entrypoint] GENERATED ROOT PASSWORD: aKAzZiqmYqAx0fnedABOnOLrYdOg

登录mysql

docker exec -it mysql mysql -uroot -p

输入刚才看到的密码,即可登录docker里面的mysql数据库。

修改mysql的root密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

更加简单的做法

docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql

创建数据库和用户

create database mydb;

创建用户,并分配权限:

create user 'myuser'@'%' identified by 'mypassword';
select * from mysql.user where User = 'myuser';
grant all privileges on mydb.* to 'myuser'@'%';

这里设置的用户是可以远程访问的,永许任何id都可以远程访问。 关于mysql8的用户创建,具体可以看一看,之前的文章:CentOS7安装mysql

到这里,我们的docker中的mysql基本上就准备好了。

springboot容器

Dockerfile

在spring boot项目根目录创建Dockerfile文件,这个文件就是使用docker根据该文件来构建docker脚本文件。

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=build/libs/myapp-1.0-SNAPSHOT.jar
COPY ${JAR_FILE} myapp.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/myapp.jar"]
  • FROM openjdk:8-jdk-alpine:表示spring boot工程在docker使用的jdk;
  • VOLUME /tmp:需要挂载一个/tmp目录;
  • ARG JAR_FILE=build/libs/myapp-1.0-SNAPSHOT.jar:本地spring boot工程构建的目录位置,这里是Gradle的构建位置,Maven可能有不同;
  • COPY ${JAR_FILE} myapp.jar:运行copy命令,将Gradle或Maven构建好的jar文件,复制到docker的位置;
  • ENTRYPOINT:这是docker容器启动的命令。

application.properties

spring.datasource.url=jdbc:mysql://mysql:3306/zyldb?useSSL=true&useUnicode=true&characterEncoding=utf8

**注意:**这里必须使用docker容器名称,而不能使用ip地址。

构建jar和docker镜像

以配置好后,使用Gradle进行jar构建:

./gradlew clean && ./gradlew build

Maven:

./mvnw clean && ./mvnw package

这样就得到了可以部署的jar包,这样完成后,就开始构建docker镜像:

docker build -t myapp .

这个docker build命令会主动去使用Dockerfile文件进行docker镜像构建并发布的到docker中。检查镜像是否构建成功:

docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
myapp               latest              21b5b76385f2        14 minutes ago      157MB

运行docker中的Spring boot

docker run --link mysql -p 8080:8081 myapp
  • --link:当前创建的容器连接mysql容器
  • -p 8080:8081:当前创建容器的springboot端口为8081映射到docker外面机器的8080端口
  • myapp:使用的镜像

或者,这样运行:

docker run --name myapp_springboot --link mysql -p 8080:8081 -d myapp

到这里,关于使用docker来部署spring boot的问题基本上就解决了。

参考

© 著作权归作者所有

亚林瓜子

亚林瓜子

粉丝 22
博文 250
码字总数 83241
作品 0
长沙
高级程序员
私信 提问
加载中

评论(1)

Baby_Moon
Baby_Moon
容器互联除了 --link,有什么更通用的吗?如果容器不在一个物理主机怎么办?
SpringBoot系列教程JPA之基础环境搭建

JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。JPA作为标准,实际上并没...

小灰灰Blog
06/16
42
0
Spring Boot整合模板引擎jsp

jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 1.1 使用内嵌Tomcat运行项目 在IDE中右键运行启动类,也就是直接直接运行App...

yysue
2018/06/15
299
5
Spring Boot 学习系列(08)—自定义servlet、filter及listener

此文已由作者易国强授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 传统的filter及listener配置 在传统的Java web项目中,servlet、filter和listener的配置很简单...

网易云
2018/11/01
0
0
给Docker中的Mysql导入sql文件数据

问题 新创建的mysql docker容器,想要给该mysql导入sql文件数据。 前提 docker中mysql容器(mysql)已经正常运行了 mysql的数据库(mydatabase)已经创建好了 mysql的root用户密码已经设置完...

亚林瓜子
05/17
33
0
SpringBoot | 第三十章:Spring-data-jpa的集成和使用

前言 在前面的第九章:Mybatis-plus的集成和使用章节中,介绍了使用框架进行数据库的访问。今天,我们来简单学习下如何使用进行数据库的访问。由于本人未使用过,也是趁着写博文的机会查阅了...

oKong
2018/10/31
249
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
24分钟前
0
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
21
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部