顺德网站设计,手机网站域名,做电商怎么建网站,案例剖析网站Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信#xff08;如MySQL访问、Redis访问#xff09;多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置
这里使用多yaml配置文件…Docker部署jar 实现功能 部署springboot下发布的jar包不同docker容器之间通信如MySQL访问、Redis访问多个jar包部署 参考文献 Just a moment… Just a moment… https://www.jb51.net/article/279449.htm springboot配置
这里使用多yaml配置文件这样子我们在服务端就可以使用java -jar时附带参数来选择性的使用对应的配置文件 注意下面三个文件所有内容都必须是完整的也就是说我们后续是直接选择其中的一个配置文件进行启动不会用到其他剩下的几个配置文件
application默认配置文件我们进行本地调试的时候使用MySQL地址直接写localhostapplication-dev这个不要管我随便写的application-pro生产环境配置文件MySQL地址写桥接对象容器的地址我这里使用的是我开启的MySQL容器名mysql8这里后续会讲解为什么这么做
application.yaml
server:port: 10085spring:datasource:url: jdbc:mysql://172.18.0.2:3306/esp?characterEncodingutf-8serverTimezoneUTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 100minimum-idle: 10
# swagger基本配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: defaultpaths-to-match: /**packages-to-scan: io.zhiller.zercardpacket.controller
# knife4j的增强配置不需要增强可以不配
knife4j:enable: truesetting:language: zh_cnapplication-pro.yaml
server:port: 10085spring:datasource:url: jdbc:mysql://mysql8:3306/esp?characterEncodingutf-8serverTimezoneUTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 100minimum-idle: 10
# swagger基本配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: defaultpaths-to-match: /**packages-to-scan: io.zhiller.zercardpacket.controller
# knife4j的增强配置不需要增强可以不配
knife4j:enable: truesetting:language: zh_cn之后按照顺序依次点击maven对应生命周期指令在我们每次修改代码后要上传到服务器时都必须完整的再走一遍这个步骤 之后你就会在项目根目录下的target文件夹内找到编译好的jar包 我这里把jar包命名为 zer-backend.jar
特别注意这里还需要我们删去一些内容 打开pom.xml 在mainClass标签下有一个skip标签必须把它删掉不然我们切换不同配置文件的时候会直接拒绝并报错 下图展示的是删除过后的pom.xml文件
buildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationmainClassio.zhiller.zercardpacket.ZerCardPacketApplication/mainClass/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build创建MySQL容器
我的springboot上使用的mysql-connect-j版本是8的所以我这边也直接使用mysql:latest镜像也就是最新的MySQL8镜像 拉取镜像docker pull mysql:latest 构建MySQL容器docker run -d -p 10085:10085 --name mysql8 -e MYSQL_ROOT_PASSWORD mysql:latest
此时注意要在服务器的安全组策略内允许3306端口访问 之后你可以通过navicat连接到MySQL然后添加对应数据库和表啥的这里不演示
配置桥接网络
由于我们使用docker同时部署了springboot的jar包以及MySQL那么两个容器之间实际上是相互隔离的我们只能通过docker给出的桥接方式把两个容器通过桥接网络连接起来这样子springboot才可以连接到对应容器内的MySQL 举例对于连接到同一个docker桥接网络下的两个容器d1和d2
可以直接通过各自在桥接网下的IP联通如ping 172.18.0.2或者直接使用对应容器名联通如ping d1
首先看一下当前有哪些桥接网络docker network ls 我这里之前创建了一个桥接网络esp-network我们可以执行以下指令创建对应桥接网络 docker network create [网络名字]
把对应容器添加到桥接网络的方式有两种我们使用第二种方式关联桥接网络
在容器创建时添加不推荐容器创建后通过指令关联推荐自由度更高
把创建好的MySQL容器添加到桥接网络内 docker network connect esp-network mysql8
构建docker镜像 这里我使用mobaxterm链接到云服务器建议大家也下载一个这个软件他比啥xshell好使多了而且还免费 随便选择一个空文件夹我这里有三个文件
dockerfile用于构建对应jar包的镜像文件espbk-shell.sh偷懒专用全自动镜像创建、运行、桥接网络所有步骤便于后续快速更新镜像zer-backend.jar我们刚刚打包好的jar包
dockerfile
# 我的springboot编译时使用JDK1.8所以这里搭设openjdk:8环境
FROM openjdk:8# 设置容器所有者
MAINTAINER zhiller# 把当前文件夹下的jar包添加到容器内
ADD ./zer-backend.jar backend.jar# 这是正常的不带参数的启动方式
# CMD [java,-jar,backend.jar]# 因为我们需要使用生产环境所以使用参数spring.profiles.active开启
# spring.profiles.active是全量覆盖也就是说只会启用这一个配置文件不会管其他的配置文件
CMD [java,-jar,backend.jar,--spring.profiles.activepro]espbk-shell.sh
#!/bin/bashcontainer_nameespbk # 容器名
container_port10085 # 容器运行端口
image_nameespbk # 镜像名
image_tag1.0 # 镜像tag一般我们使用latest这里我用1.0
dockerfile_namedockerfile # dockerfile的文件名
networkesp-network # 桥接网络的名称echo 正在停止并删除docker镜像docker rm -f ${container_name}docker image rm ${image_name}:${image_tag}echo 正则重新更新当前镜像docker build -f ./${dockerfile_name} -t ${image_name}:${image_tag} .docker run -d -p ${container_port}:${container_port} --name ${container_name} ${image_name}:${image_tag}docker network connect ${network} ${container_name}echo 大功告成您可以查看已经更新的镜像了这样子我们可以直接运行脚本实现部署bash espbk-shell.sh 最后把我们构建好的jar包容器添加到桥接网络docker network connect esp-network espbk
最后监视一下我们的桥接网络确认MySQL和jar包容器都在同一个桥接网络下 docker network inspect esp-network 找到container字段里面就包含了该桥接网络下存在的容器 不难发现MySQL使用172.18.0.2而我们的jar包使用172.18.0.3
网络调试 由于我们使用dockerfile构建jar包镜像是使用的底层镜像是openjdk他不带基本的linux指令也就是说没有ping、netstat这些关键指令 我们可以曲线救国使用主机自带的指令直接操控容器 具体可参考文献docker容器内缺少命令的简单解决办法_docker_脚本之家 首先安装依赖我使用ubuntuapt-get install -y util-linux
之后使用管道函数过滤出我们正在运行的jar包容器docker ps | grep espbk 复制容器的长ID划红线处 根据容器ID获取容器的PIDdocker inspect --format {{ .State.Pid }} 2877e2947850
之后就可以愉快的使用nsenter指令来操控容器了nsenter -t 3873441 -n ifconfig