windows下使用dockerdesktop进行部署
Docker部署springboot项目
环境准备
要在windows上使用docker需要确认系统的需求
- 需要启用虚拟化支持的CPU
- 启用适用于windows的Linux子系统功能
- 保证足够的内存


下载dockerdesktop

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

坑点
安装过程中需要安装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

管理员启动powershell,运行
bcdedit /set hypervisorlaunchtype Auto
即可正常下载。
连接数据库
适用docker network ls列出网络配置

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

配置好自己项目的数据库
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

在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查看复制过去的文件,非常方便。

坑点
运行中报错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注解,这个是因为我配置了拦截器,这个注解主要是取消拦截,如果你的项目中没有配置,可以不用写。
访问本地,可以正常访问

ipconfig查看你的主机地址

可以成功访问。
dockerdesktop可查看日志

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

后来把项目端口改成8080映射访问就正常了。
总的来说确实有很多需要注意的点,希望平常大家在遇到bug时要多多思考,善于查阅文档资料,理清项目的逻辑,可以更快速的解决问题。
windows下使用dockerdesktop进行部署的更多相关文章
- windows下安装Redis并部署成服务
windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群
0. 说明 Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建 ...
- windows下apache + mod_wsgi + python部署flask接口服务
windows下apache + mod_wsgi + python部署flask接口服务 用python3安装虚拟环境 为啥要装虚拟环境? 原因1:安装虚拟环境是为了使项目的环境和全局环境隔离开,在 ...
- 【转】windows下nginx+mono+fastCGI部署asp.net网站
原文链接:http://www.cnblogs.com/amityat/archive/2011/08/23/2150153.html 1,什么是nginx 简介Nginx ("engine ...
- windows下安装redis并部署服务
下载地址: windows版本: https://github.com/MSOpenTech/redis/releases Linux版本: 官网下载: http://www.redis.cn/ gi ...
- Windows下RabbitMQ安装,部署,配置
安装部署 1.当前环境以及参考资料出处 部署环境:windows server 2008 r2 enterprise 官方安装部署文档:http://www.rabbitmq.com/install- ...
- windows下RocketMQ的安装部署
一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 1.下载 1.1地址:http://rocketmq.apache.org/relea ...
- windows下go开发环境部署 (sublime+gosublime+geocode)
1.下载git.go和sublime免安装版 go下载地址:http://pan.baidu.com/s/1hq1mrDM#path=%252Fgo%252F1.5.2sublime下载地址:http ...
- IntelliJ IDEA Windows下Spark开发环境部署
0x01 环境说明 本地 OS: windows 10 jdk: jdk1.8.0_121 scala: scala-2.11.11 IDE: IntelliJ IDEA ULTIMATE 2017. ...
随机推荐
- istio sidecar 工作方式
istio 是什么 Istio 是一个开放源代码的服务网格,它为基于微服务的应用程序提供了一种统一的方式来连接.保护.监控和管理服务.Istio 主要解决的是在微服务架构中的服务间通信的复杂性问题,它 ...
- C语言:贮油点建设问题(详解题目意思)
!!!!先看解析,后面附有代码!!!!!!! ,希望大家不懂的能认真看看,这些都是我在写的过程中不能理解,遇到的困难,然后弄懂之后总结出来给大家的,想学的一定要认真看完. 规律是: 贮油点之间相差50 ...
- MySQL日志文件简记
日志文件 binlog binlog主要记录了MySQL数据库执行了更改的所有操作,主要用来做主从复制,数据恢复 记录模式: Statement模式:每一条回修改数据的sql都会被记录在日志中 Row ...
- 搭建一套完整的ELK系统
ELK日志收集系统介绍 一 简单介绍 ELK部署搭建有很多成型的方案,这里推荐一种比较中规中矩的方案,它整合了logstash比较消耗资源以及当服务端临时宕机的时候出现数据丢失的问题,主要由fi ...
- wxPython==4.2.1 aui.AuiToolBar 如何去掉烦人的抓手?
aui.AuiToolBar 如何去掉烦人的抓手? 最近在用wxPython做一些GUI小应用,发现工具栏总有几个点(抓手),很影响美观,如下: 目前官方没有提供隐藏抓手的功能,需要更改源码的auib ...
- Django 视图views的基本使用
在 Django 中,视图函数是一个 Python 函数或者类,开发者主要通过编写视图函数来实现业务逻辑.视图函数首先接受来自浏览器或者客户端的请求,并最终返回响应,视图函数返回的响应可以是 HTML ...
- Vue——计算属性和侦听属性
一.计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如,有一个嵌套数组对象:我们想根据 author 是否已经有一些书来显示不同的 ...
- aardio桌面软件开发 简单,打包后文件小,支持 .net python 和 众多插件
aardio 编程语言 - 官网 aardio 专注于桌面软件开发,17年一直保持非常活跃地更新( 更新日志 ),aardio 被多年用于生产项目实践,久经测试和锤炼.aardio 在诞生之初就设计 ...
- LangChain让LLM带上记忆
最近两年,我们见识了"百模大战",领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆. 在对话中,无法记住上下文的 LLM 常常会让用户感到困扰.本文探讨如 ...
- 用 KV 缓存量化解锁长文本生成
很高兴和大家分享 Hugging Face 的一项新功能: KV 缓存量化 ,它能够把你的语言模型的速度提升到一个新水平. 太长不看版: KV 缓存量化可在最小化对生成质量的影响的条件下,减少 LLM ...