ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用docker部署springboot应用

2021-11-01 15:02:08  阅读:183  来源: 互联网

标签:容器 springboot 部署 spring jar springboot2 mysql docker


《使用docker安装mysql5.7》一文中,我们用docker在本地跑起来了一个mysql容器,并做了测试。现在我们把连接mysql容器的这个springboot应用也用容器跑起来。

springboot工程的容器化

在项目根目录新建Dockerfile:

# Docker image for springboot application
# VERSION 0.0.1
# Author: lyhero11

### 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM openjdk:8u201-jdk-alpine3.9

#作者
MAINTAINER lyhero11 <myemail@gmail.com>

#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp

#应用构建成功后的jar文件被复制到镜像内,名字改成springboot2.jar
ADD build/libs/springboot2-0.0.1-SNAPSHOT.jar springboot2.jar

#启动容器时的进程
ENTRYPOINT ["java", "-jar", "/springboot2.jar"]

#暴露8080端口
EXPOSE 8080

然后修改一下application.properties配置文件:

# 应用名称
spring.application.name=springboot2
server.servlet.context-path=/springboot2
# 应用服务 WEB 访问端口
server.port=8080
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=${MYSQL_URL}?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=${MYSQL_USER}
spring.datasource.password=${MYSQL_PASSWORD}

spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

主要是mysql的url连接串以及用户名密码这些通过环境变量来设置。而这个springboot应用是将要跑在容器里的,所以显然这几个环境变量是通过设置容器的环境变量来设置的。

构建镜像并启动容器

gradle bootJar生成jar包之后,我们构建镜像,在Dockerfile所在目录执行:

docker build -t lyhero11/springbootapp2 .

-t表示--tag,后面lyhero11/springbootapp2是镜像名或者叫标签。

然后,我们启动容器:

docker run --rm -d `
--name springbootapp2 `
--network mysqlnet `
-e MYSQL_URL=jdbc:mysql://mysqlserver/mydb `
-e MYSQL_USER=root `
-e MYSQL_PASSWORD=pswd `
-p 8080:8080 lyhero11/springbootapp2

这里说明一下jdbc:mysql://mysqlserver/mydb,因为我们使用了bridge网络mysqlnet,可以起到一个DNS的作用(可以使用docker network ls查看本机的docker网络),所以只需要使用容器名mysqlserver就可以了,不用ip端口了。-e表示设置容器的环境变量,给上面的application.properties用,另外如果容器启动失败,可以把-d去掉,去看看springboot的输出日志。

Postman测试一下GET http://localhost:8080/springboot2/rest/getTokenByMobile?mobile=13700000000 ,从数据库查询并正确返回结果。

附本地的几个image的大小:

docker images
REPOSITORY                TAG                   IMAGE ID       CREATED          SIZE
lyhero11/springbootapp2   latest                32c6d6d34615   41 minutes ago   143MB
<none>                    <none>                cc42c391bbe9   47 minutes ago   143MB
<none>                    <none>                2a090734a030   2 hours ago      143MB
mysql                     5.7.36                938b57d64674   13 days ago      448MB
redis                     6.0.16                705235b45ae0   2 weeks ago      112MB
openjdk                   8u201-jdk-alpine3.9   3675b9f543c5   2 years ago      105MB

除了mysql的镜像稍微大了一点,其他都是100M多,然后docker的特性image是基于其他若干image一层一层摞起来的,这里可以看出来openjdk8的image是105M,基于它构建的springbootapp2是143M,所以两者的差值基本上就是jar包的大小,这与事实相符。可见docker的存储效率还算是比较高的。

标签:容器,springboot,部署,spring,jar,springboot2,mysql,docker
来源: https://www.cnblogs.com/lyhero11/p/15493712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有