首页 > 系统相关 >windows下使用dockerdesktop进行部署

windows下使用dockerdesktop进行部署

时间:2024-07-10 16:19:41浏览次数:14  
标签:windows app jar dockerdesktop 部署 mysql test docker

Docker部署springboot项目

环境准备

要在windows上使用docker需要确认系统的需求

  • 需要启用虚拟化支持的CPU
  • 启用适用于windows的Linux子系统功能
  • 保证足够的内存
    img
    img

下载dockerdesktop
img

下载后会提示安装对应的环境

img

坑点

安装过程中需要安装wsl环境,会遇到0x80370102问题。
根据官方文档,报这个错是因为未启用BIOS虚拟化所引发的错误。网上搜这个错误,大部分都是说要在BIOS中启用CPU的虚拟化功能。

安装失败,出现错误 0x80070003 或错误 0x80370102

  • 请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。
  • WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能,后者已在 Intel Nehalem 处理器(Intel Core 第一代)和 AMD Opteron 中引入。 即使成功安装了虚拟机平台,旧版 CPU(例如 Intel Core 2 Duo)也无法运行 WSL2。

然而虚拟化在本机上应该是配置完整了的。
另一点,WSL2是基于Windows的hyper-v虚拟平台的,但是开启hiper-V功能依然报错。
查询资料后,发现hiper-V还依赖底层的Hypervisor
img
管理员启动powershell,运行

bcdedit /set hypervisorlaunchtype Auto

即可正常下载。

连接数据库

适用docker network ls列出网络配置
img
pull 对应的mysql镜像

docker pull mysql
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my_mysql mysql
# 通过镜像生成对应的容器
docker exec -it my_mysql bash #进入容器进行测试
mysql -uroot -p123456 #成功进入容器内mysql

img
配置好自己项目的数据库

  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
    show-sql: true
    hibernate:
      ddl-auto: update
  datasource: # 数据库配置
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://my_mysql:3306/test_1?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
    username: root
    password: 123456
    hikari:
      maximum-pool-size: 10 # 最大连接池数
      max-lifetime: 1770000

img
在dockerdesktop可以查看网络状态。

坑点

报错Failed to initialize JPA EntityManagerFactory: Unable to create requested service。和
Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
都是没有正确配置数据库的问题

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

这行代码是解决问题的关键,要是写了还有错一定要注意格式。(特别是yml文件,我这里出问题就是spring:写的位置不对)

打包项目

在根目录下配置Dockerfile和docker-compose.yml(docker-compose已经集成到了dockerdesktop中,所以无需下载)
我的配置如下:
Dockerfile

FROM openjdk:8u212-jdk
VOLUME /tmp
RUN mkdir -p /app
#ADD 后面的参数是项目名字 / 后面的参数是自定义的别名
ADD target/test.jar /school.jar
#这里的最后一个变量需要和前面起的别名相同
COPY target/test.jar /app/test.jar
COPY src/main/resources/logback.xml /app/logback.xml
COPY src/main/resources/application.yml /app/app.xml
WORKDIR /app
EXPOSE 9091
ENTRYPOINT ["java", "-Dlogback.configurationFile=/app/logback.xml","-jar", "/school.jar"]

docker-compose

version: '3'
services:
  mysql:
    image: mysql
    container_name: my_mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test_1
      MYSQL_PASSWORD: 123456
    ports:
      - "3307:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - test_default

  springboot-app:
    image: school
    depends_on:
      - mysql
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://my_mysql:3306/test_1
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 123456
    ports:
      - "9091:8080"
    networks:
      - test_default

volumes:
  mysql-data:

networks:
  test_default:
    external: true

使用如下命令

mvn clean package #项目打包
docker build -t school .#构建项目镜像
docker-compose up -d #两个镜像一起构建容器

配置好后可以在dockerdesktop查看复制过去的文件,非常方便。
img

坑点

运行中报错Logging system failed to initialize using configuration from 'logback.xml'。可能是你的logback文件位置不正确。
通常它应该位于/src/main/resources目录下,如果还是不正确需要jar tf jar包,看看文件是不是确实在里面。

测试

测试代码

@RestController
@RequestMapping("/test")
public class TestController {
    private final static Logger logger = LoggerFactory.getLogger(TestController.class);
    @RequestMapping("/log")
    @UnInterception
    public String testLog() {
        logger.debug("=====测试日志debug级别打印====");
        logger.info("======测试日志info级别打印=====");
        logger.error("=====测试日志error级别打印====");
        logger.warn("======测试日志warn级别打印=====");
        String str1 = "blog.itcodai.com";
        String str2 = "blog.csdn.net/eson_15";
        logger.info("======测试:{}", str1, str2);

        return "success";
    }
}

不用管UnInterception注解,这个是因为我配置了拦截器,这个注解主要是取消拦截,如果你的项目中没有配置,可以不用写。
访问本地,可以正常访问
img
ipconfig查看你的主机地址
img
可以成功访问。
dockerdesktop可查看日志
img

坑点

使用dockerdesktop有个巨大坑点,这个bug足足困扰我一天,由于之前项目一直使用的是9090端口,在部署时访问一直都是ERR_EMPTY_RESPONSE或者连接被拒绝,搜索了很多资料,防火墙也关闭了。但是bug一直都存在。并且使用docker ps显示就是9091/tcp, 0.0.0.0:9091->9090/tcp,这就有点奇怪了。
后来查看日志发现也没报错请求,一切就好像没有请求过一样。
最后才发现在dockerdesktop上运行一直初始化就是8080,也就是我的9090端口从来都没有被映射成功过,这确实我也不懂。
img

后来把项目端口改成8080映射访问就正常了。
总的来说确实有很多需要注意的点,希望平常大家在遇到bug时要多多思考,善于查阅文档资料,理清项目的逻辑,可以更快速的解决问题。

标签:windows,app,jar,dockerdesktop,部署,mysql,test,docker
From: https://www.cnblogs.com/Sun-Wind/p/18294329

相关文章

  • 【转载】如何完整删除Windows.old(详细教程)
    原文链接:https://blog.csdn.net/bluewn/article/details/104325594当你升级或重新安装Windows时,你的旧文件可能会被放在C:驱动器上的一个文件夹中,这个文件夹的标签是Windows.old。这对于检索旧文件非常有用,但它会占用计算机上的一大块空间。你不能像删除大多数文件夹那样删除文......
  • Redis安装部署和常用命令
    一、Redis基本概念端口号:63791.关系型数据库和非关系型数据库区别 SQLNoSQL存储结构二维表格结构不固定的,键值对、文档、索引、图形结构、时间序列等扩展方式纵向扩展(提升硬件性能)横向扩展(增加服务器节点数量)事务支持基于ACID原则,事务控制更稳定,细粒度更高......
  • 金丝雀部署的艺术:在Eureka中实现渐进式服务更新
    金丝雀部署的艺术:在Eureka中实现渐进式服务更新引言在微服务架构中,金丝雀部署是一种逐渐将新版本的服务引入生产环境的策略,以测试新版本在小规模用户群中的表现,并减少更新风险。Eureka作为Netflix开源的服务发现框架,为实现金丝雀部署提供了支持。本文将深入探讨如何在Eure......
  • Windows定时器-timeSetEvent
     接口:MMRESULTtimeSetEvent(UINTuDelay,//以毫秒指定事件的周期UINTuResolution,//以毫秒指定延时的精度,缺省值为1msLPTIMECALLBACKlpTimeProc,//指向回调函数的指针WORDdwUser,//用户定义的回调数据,传递给回调函数......
  • asp.net webform在Linux上部署--jexus
    JexusWebServer官网什么是JexusJexus是“JexusWebServer”的常用简称,也可简称为“JWS”。Jexus是一款运行于Linux环境的具有高安全性、高可靠性的高性能WEB服务器和负载均衡网关服务器。除了具备通用WEB服务器所必备的功能外,Jexus还能直接支持各类Asp.NetWEB应用,并以特有......
  • Windows下升级JDK
    1.官网下载安装包,官网地址:https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 2.java-version检查现有jdk版本3.修改环境变量 4.  java-version检查jdk版本,未生效 输出环境变量,发现确实配置已经成功 5.重启电脑,搞定 ......
  • Nginx——一个域名下部署多个Vue项目
    前言当前生成环境已经有一个正常的Vue项目,现在需要将大屏项目也部署到同一个域名下,搜索了下类型的问题,感觉问的还挺多的,所以这里记录下操作步骤;如何在不动第一个项目的情况下来部署第二个Vue项目;内容前端配置publicPath修改vue.config.js下的publicPath参数publicPath:pr......
  • Docker-搭建部署Jenkins(保姆篇)
    文章目录Jenkins部署拉取镜像启动容器查看初始密码关闭CSRFJenkins页面使用解决插件下载缓慢访问jenkins页面推荐插件安装创建一个管理员账号实例配置页面展示更多相关内容可查看Jenkins部署拉取镜像如果想拉取对应版本请指明版本号dockerpulljenkins/jenki......
  • 如何在 Windows 10 上恢复未保存的 Word 文档
    您是否整晚都在处理一个重要的word文件,但忘记保存它了?本文适合您。在这里,我们将解释如何恢复未保存的word文档。除此之外,您还将学习如何恢复已删除的word文档。从专业人士到高中生,每个人都了解丢失重要Word文件的痛苦。幸运的是,有多种方法可以恢复未保存和已删除的Wo......
  • ab for windows
    Windows上安装和使用ab压测Apachebench是一款压力测试工具,用于测试http服务请求的性能情况1下载http://httpd.apache.org/docs/current/platform/windows.html#down #管理员模式进入CMD C:>d:  D:\>cdapache  D:\apache>cdApache24  D:\apache\Apache24>c......