SpringBoot打包docker镜像并桥接mysql(windows版)
文章目录
- docker建立桥bridge
- SpringBoot项目配置文件调整
- idea增加插件
- 增加Dockerfile文件
- docker上管理端口的暴露
- idea连接docker
- 构建 Docker 镜像
- 测试网站
docker建立桥bridge
由于docker内的容器都是相互隔离不能通讯的,所以我们需要建立桥让容器之间可以互相通讯
思维导图:
bridge存在的意义:
- 隔离各个容器,使得每个容器的端口号都是隔离的。如果不隔离开来,那么容器将和宿主机,容器和容器间都会发生
端口占用
的情况 - docker的桥接网络使用
虚拟网桥
,bridge网络用于同一主机上的docker容器相互通信,连接到同一个网桥的docker容器可以相互通信,当我们启动docke时,会自动创建一个默认bridge网络,除非我们进行另外的配置,新创建的容器都会自动连接到这个网络,我们也可以自定义自己的bridge网络,docker文档建议使用自定义bridge网络 - 连接到同一bridge网络的容器可以相互访问彼此任意一个端口,如果不发布端口,外界将无法访问这些容器,在创建容器时,通过-p或是–publish指令发布端口
常用命令:
- 查看所有网络:
docker network ls
- 创建bridge网络:
docker network create -d bridge 网桥名字
- 查看某个网络详情:
docker network inspect 网络ID
- 删除某个网络:
docker network remove 网络id
- 让某个镜像加入到bridge中:
docker network connect 网络id 容器名
建立网桥,将我们需要连接的mysql容器加入,如果没有mysql容器可以通过一下命令拉取并创建一个
拉取镜像(默认下载最新版,可以通过mysql:版本号指定版本):
docker pull mysql
创建一个mysql容器(并指定了登录的root密码,这里设置的是a,可以自行调整)
docker run -p 3308:3306 --name testmysql -e MYSQL_ROOT_PASSWORD=a -d mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
参看一下:
创建一个网桥:
查看:
将mysql容器加入到网桥中:
记住这个ip地址,这个ip是docker容器内部访问的内部ip地址
SpringBoot项目配置文件调整
首先需要调整配置文件,需要调整测试
配置文件
和实际生产环境
的配置文件
由于docker打镜像之前我们需要使用maven插件打jar包,而maven package之前又会先clear和test,所以我们需要保证所有的测试代码都是可以正常运行的,不然待会打包会出错
修改测试类配置文件
这里一定要特别注意!!!测试文件测试的时候还没有被我们打成镜像,所以是通过容器外访问的,这里连接mysql的 ip和端口号应该我们从容器外面访问的
我上面设置的是将本机的3310端口映射到容器内的3306端口,所以我这里的测试文件是这样的:
弄完之后先将测试文件跑几遍,确保没有问题出现,不然后面打镜像会报错,切记
修改生产环境的配置文件
这里也要特别注意!!!我们最终会将项目打成镜像,会从docker容器里以内部ip和端口访问容器里的mysql容器,所以这里我们填的ip和端口号应该是容器内部访问的
在上面查看网桥的时候我们已经看到容器内部ip了,端口号也应该是容器内部访问的,非映射端口
所以我的配置文件是这样的:
idea增加插件
首先我们需要先将我们SpringBoot测试的start中的vintage
引擎排除掉,vintage
是junit5之前的测试引擎,5的换掉了,我们使用starter会默认使用junit5,注意junit的测试依赖只要加starter就可以了,不要再单独加一个junit的测试依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><!-- vintage是junit5之前的日志引擎,5换了,所以排除掉 --><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions><scope>test</scope>
</dependency>
然后我们需要添加两个打包插件,一个maven打包插件和一个docker打镜像插件,这里又有一个注意点,docker打镜像的插件里的dockerfile
的路径就写Dockerfile就好,不要写带文件夹的路径,例如docker/Dockerfile,这个是这个打镜像插件1.4版本后的一个坑,实测dockerfile写带路径的地址会出错
<plugins><!--用于解决boot-package no main manifest attribute,in /app.jar 错误--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- 根据dockerfile生成docker镜像 --><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><executions><execution><id>default</id><goals><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><repository>javastack/${project.name}</repository><tag>${project.version}</tag><buildArgs><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs><dockerfile>Dockerfile</dockerfile></configuration></plugin>
</plugins>
增加Dockerfile文件
Dockerfile文件放的地方在这里,和pom.xml一级
Dockerfile文件:
# 添加 Java 8 镜像来源
FROM java:8# 添加参数
ARG JAR_FILE# 添加 Spring Boot 包
ADD target/${JAR_FILE} app.jar# 执行启动命令 就是java启动命令
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
解释一下:
FROM java:8
是指这个镜像依赖于java8的环境,在打镜像的时候就会将java8的环境加到镜像中
ARG JAR_FILE
:这个指令可以进行一些宏定义,比如我定义ARG JAR_FILE
,会将jar文件的名字添加到下面的${JAR_FILE}
中
ADD target/${JAR_FILE} app.jar
:添加SpringBoot打好的jar包,并在打镜像的时候将其名称为app.jar进行打包
ENTRYPOINT
启动命令,类似于我们java命令行启动SpringBoot项目的命令,例如我们一般启动打好的jar包会这样
java -jar xxx.jar
有的时候我们还需要添加命令行参数指定配置文件
java -jar xxx.jar -Dspring.profiles.active=prod
这里的ENTRYPOINT
启动命令也就是类似作用,作为启动镜像的命令,每条命令都用双引号包裹起来,命令最后面的app.jar就是我们上一步指定的名字,我这里将启动的配置文件改成了application-prod
docker上管理端口的暴露
我这里采用的是windows上的图像化界面
idea连接docker
先将我们idea中Service面板调出来
添加连接:
连接一下本地的Docker:
然后我们就可以看到我们的docker里放的镜像和容器了
构建 Docker 镜像
直接package,插件会按照我们定义好的Dockerfile进行构建镜像,打包的过程中会下载依赖可能会比较慢,如果报错了先检查下配置文件中桥接的地址,再看下测试类是否都能通过
打好后,插件里可以看到你构建好的镜像
现在需要生成一下容器
配置一下容器的端口
将容器加到网桥中
idea里Service面板下面有Connection选项,可以用图形化界面进行连接,我这里用命令行连接一下
查看一下,一定要将mysql容器和自己boot的容器放到一个网桥下
测试网站
启动所有容器,然后访问网站,连接mysql容器成功!
SpringBoot打包docker镜像并桥接mysql(windows版)相关推荐
- springboot打包docker镜像部署
springboot打包docker镜像部署 环境准备 机器 vultr一台,centos7 资源下载 jdk8 maven git yum install git docker yum instal ...
- docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]
docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...
- Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像
⑦ Docker 网络 7.1 理解Docker0 清空下前面的docker 镜像.容器 # 删除全部容器 [root@cVzhanshi tomcat-diy]# docker rm -f $(do ...
- BI系统打包Docker镜像及部署的技术难度和实现
BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...
- Spring Boot项目打包Docker镜像
Spring Boot项目打包Docker镜像 1.编写 Dockerfile 文件 2.加入 spring boot 根路径, 进行 mvn package 打包 3.打包上传项目并解压 4.进入 ...
- 打包docker镜像,推送远程服务器,部署到k8s步骤
打包docker镜像 前提条件 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前 ...
- 打包docker镜像推送到远程服务器并部署到k8s
前提条件: 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前的文章中我们已经通过 ...
- IDEA 打包docker镜像(以打包Jdk8为例)
目录 1.Idea项目中准备jdk8打包docker镜像的相关文件 2.编写Dockeffile文件 3.编辑Configurations 添加Dockerfile 4.创建镜像 Idea中docke ...
- SpringCloud项目打包Docker镜像并发布到Harbor仓库
SpringCloud项目打包Docker镜像并发布到Harbor仓库 1. Docker-compose安装 2. Harbor仓库搭建 3. Docker环境配置 4. 项目配置 1. Docke ...
最新文章
- MSC EASY5 2020中文版
- 【需求】手机无线投屏到电视需求整理,Miracast无线投屏功能应用及需求
- Java中浮点数的基础知识
- Linux解决find /run/user/1000/gvfs
- BeanFactory作为 IoC 容器示例
- HTTPHandler有什么作用
- 以下属于linux文件系统认为的文件是,信息安全技术题库:在Linux系统中,图形文件、数据文件、文档文件等都属于()。...
- 更新CocoaPods碰到的问题及知识点
- 题目:[汪老师结婚]婚礼上的袭击
- 人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
- 微信小程序一键连接已知wifi
- 六一小学生计算机创新活动总结,小学科技创新活动总结4篇
- 肖sir__面试就业课___数据库
- 微信小程序语音转文字demo
- 托福高频真词List17 // 附托福TPO阅读真题
- HFDS伪分布式集群搭建
- 使用 maven-semantic-release 实现自动化发版
- c语言总统竞选问题,一上台就紧张?这个模型生成演讲替身,肢体语言比总统候选人还丰富...
- 遥感识别4——语义分割样本数据集制作
- dirbuster and 御剑 目录扫描工具
热门文章
- 【advertisement(guanggao)】customize development(dingzhihuakaifa)
- Python 爬虫 爬取安智网应用信息
- uniapp h5直播拉流的几种方法 flv.js, video.js, 阿里播放器sdk,video标签
- 机器学习综述与“Hello World”
- 多线程系列教材 (五)- Java 演示多线程死锁
- Linux内核邻接子系统(arp协议)的工作原理
- oracle中同义词
- 基于CNN的图像质量评价
- 用NB-IoT技术拧紧燃气“安全阀”
- 博图取消所有fc加密_求助博图V13 SP1模拟时报警问题