栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot打包docker镜像并桥接mysql(windows版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot打包docker镜像并桥接mysql(windows版)

文章目录

docker建立桥bridgeSpringBoot项目配置文件调整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的测试依赖


    org.springframework.boot
    spring-boot-starter-test
    
    
        
            org.junit.vintage
            junit-vintage-engine
        
    
    test

然后我们需要添加两个打包插件,一个maven打包插件和一个docker打镜像插件,这里又有一个注意点,docker打镜像的插件里的dockerfile的路径就写Dockerfile就好,不要写带文件夹的路径,例如docker/Dockerfile,这个是这个打镜像插件1.4版本后的一个坑,实测dockerfile写带路径的地址会出错


    
    
        org.springframework.boot
        spring-boot-maven-plugin
        
            
                
                    
                        repackage
                    
                
            
        
    
    
    
        com.spotify
        dockerfile-maven-plugin
        1.4.13
        
            
                default
                
                    build
                    push
                
            
        
        
            javastack/${project.name}
            ${project.version}
            
                ${project.build.finalName}.jar
            
            Dockerfile
        
    

增加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容器成功!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号