文章目录

  • 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版)相关推荐

  1. springboot打包docker镜像部署

    springboot打包docker镜像部署 环境准备 机器 vultr一台,centos7 资源下载 jdk8 maven git yum install git docker yum instal ...

  2. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  3. Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像

    ⑦ Docker 网络 7.1 理解Docker0 清空下前面的docker 镜像.容器 # 删除全部容器 [root@cVzhanshi tomcat-diy]# docker rm -f $(do ...

  4. BI系统打包Docker镜像及部署的技术难度和实现

    BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用:传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置n ...

  5. Spring Boot项目打包Docker镜像

    Spring Boot项目打包Docker镜像 1.编写 Dockerfile 文件 2.加入 spring boot 根路径, 进行 mvn package 打包 3.打包上传项目并解压 4.进入 ...

  6. 打包docker镜像,推送远程服务器,部署到k8s步骤

    打包docker镜像 前提条件 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前 ...

  7. 打包docker镜像推送到远程服务器并部署到k8s

    前提条件: 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前的文章中我们已经通过 ...

  8. IDEA 打包docker镜像(以打包Jdk8为例)

    目录 1.Idea项目中准备jdk8打包docker镜像的相关文件 2.编写Dockeffile文件 3.编辑Configurations 添加Dockerfile 4.创建镜像 Idea中docke ...

  9. SpringCloud项目打包Docker镜像并发布到Harbor仓库

    SpringCloud项目打包Docker镜像并发布到Harbor仓库 1. Docker-compose安装 2. Harbor仓库搭建 3. Docker环境配置 4. 项目配置 1. Docke ...

最新文章

  1. MSC EASY5 2020中文版
  2. 【需求】手机无线投屏到电视需求整理,Miracast无线投屏功能应用及需求
  3. Java中浮点数的基础知识
  4. Linux解决find /run/user/1000/gvfs
  5. BeanFactory作为 IoC 容器示例
  6. HTTPHandler有什么作用
  7. 以下属于linux文件系统认为的文件是,信息安全技术题库:在Linux系统中,图形文件、数据文件、文档文件等都属于()。...
  8. 更新CocoaPods碰到的问题及知识点
  9. 题目:[汪老师结婚]婚礼上的袭击
  10. 人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
  11. 微信小程序一键连接已知wifi
  12. 六一小学生计算机创新活动总结,小学科技创新活动总结4篇
  13. 肖sir__面试就业课___数据库
  14. 微信小程序语音转文字demo
  15. 托福高频真词List17 // 附托福TPO阅读真题
  16. HFDS伪分布式集群搭建
  17. 使用 maven-semantic-release 实现自动化发版
  18. c语言总统竞选问题,一上台就紧张?这个模型生成演讲替身,肢体语言比总统候选人还丰富...
  19. 遥感识别4——语义分割样本数据集制作
  20. dirbuster and 御剑 目录扫描工具

热门文章

  1. 【advertisement(guanggao)】customize development(dingzhihuakaifa)
  2. Python 爬虫 爬取安智网应用信息
  3. uniapp h5直播拉流的几种方法 flv.js, video.js, 阿里播放器sdk,video标签
  4. 机器学习综述与“Hello World”
  5. 多线程系列教材 (五)- Java 演示多线程死锁
  6. Linux内核邻接子系统(arp协议)的工作原理
  7. oracle中同义词
  8. 基于CNN的图像质量评价
  9. 用NB-IoT技术拧紧燃气“安全阀”
  10. 博图取消所有fc加密_求助博图V13 SP1模拟时报警问题