Windows Docker部署springboot微服务

Windows Docker部署springboot微服务

前言

偶然的机会让我能够实操在Windows server 2019版本的服务器上进行springCloud服务的部署

过程中深刻的体会到了为什么Docker要推荐使用Linux系列的系统进行操作

遇到的问题

  1. springboot镜像打包
  2. 微服务启动后nacos连不上
  3. 使用的基础镜像openjdk在WindowsDocker上的问题
  4. DockerFile启动与Docker-Compose启动后的一些区别
  5. springboot在WindowsDocker镜像中的编码问题

正文

Windows Server安装Docker:

DockerByWindowsDesktop下载安装包

服务器版的WindowsServer在任务管理器中看CPU选项都是没有虚拟化选项的,所以开不开Hyper-V无所谓,也不支持WSL2

下载好后双击安装包直接自动安装了,中间只需要选择是否在桌面创建快捷方式

等待启动的过程中弹出报错就选左边第一个reset,会自动修复

如果还是不行就在状态栏中的小鲸鱼标志上右键单击,有一个switch Windows

安装启动完成后修改配置文件,右键单击小鲸鱼—>setting

image-20230719094026826

{"data-root": "E:\\Docker\\Dockerimage","debug": false,"experimental": false,"features": {"buildkit": true},"hosts": ["0.0.0.0:2375","tcp://0.0.0.0:2375"],"insecure-registries": [],"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com"]
}

参数解释

  1. data-root修改docker数据存储位置,一般来说服务器的C盘空间都不够大
  2. hosts开放docker远程连接
  3. registry-mirrors设置国内镜像下载地址

到此为止,在服务器上的配置就结束了,云服务器需要开放2375端口给自己

image-20230719094424569

IDEA操作

我的idea版本

image-20230719094534735

idea插件

image-20230719094648704

idea连接Docker服务器

进入idea设置Preferences(Setting) | Build, Execution, Deployment | Docker

image-20230719095045042

docker镜像打包

WindowsDocker的DockerFile

我使用的基础镜像为:openjdk:11-jre

以下是我的DockerFile示例:

# 基础镜像
FROM openjdk:11-jre
# 作者
LABEL maintainer="fatebug"
# 设置时区与编码
ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai
# 暴露端口
EXPOSE 13390:13390
# 创建目录
RUN mkdir -p C:\\Users\\fatebug\\logs
# 设置字符集
RUN chcp 65001
# 复制 jar 文件到目录
COPY ./jar/name.jar C:\\Users\\fatebug\\name.jar
# 设置工作目录
WORKDIR C:/Users/fatebug
# 启动系统服务
CMD ["cmd", "/k", "chcp 65001"]
ENTRYPOINT ["java", "-jar", "name.jar", "-Dfile.encoding=UTF-8", "-Xms256m", "-Xmx256m", "-XX:PermSize=128m", "-XX:MaxPermSize=512M"]
# 映射日志目录与字体目录
VOLUME C:\\Users\\fatebug\\logs
VOLUME C:\\Windows\\Fonts

这里就出现了问题3,openjdk:11-jre的Windows特供版中,使用的所有路径都是Windows路径

方法一

MavenDocker镜像编译直接上传到Docker中

DockerFile放置在项目src/main/resources目录下,按注释去修改为正确的文件目录

Maven添加plugin:

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><configuration><!--远程docker地址--><dockerHost>http://你的服务器IP:2375</dockerHost><!--镜像名称,前缀/项目名--><imageName>前缀/${project.artifactId}</imageName><!--dockerFile的位置--><dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory><resources><resource><targetPath>/</targetPath><!--默认的target文件夹位置--><directory>${project.build.directory}</directory><!--最终名称.jar--><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>

正常Maven编译打包后,点击idea Maven窗口中该模块下的plugin进行docker镜像构建

image-20230719095503967

构建完成后在服务器的镜像中可以看到改镜像(我使用的是idea中的docker进行查看

image-20230719095641982

启动命令:开放端口,挂载目录

docker run -p 13390:13390 -v E:\projectfatebug\logs:C:\Users\fatebug\logs --name demo --pull missing 镜像名:latest 

方式二

使用docker-compose进行打包运行

编写docker-compose

version : '3.8'
services:gateway:container_name: gatewayenvironment:- TZ=Asia/Shanghai- PYTHONIOENCODING=utf-8build:context: ./fatebug/gatewaydockerfile: Dockerfileports:- "13390:13390"volumes:- E:\projectfatebug\logs:C:\Users\fatebug\logs- E:\projectfatebug\Fonts:C:\Windows\Fonts

将各个文件放到对应的地方,按需求修改对应的目录

点击运行即可自动运行到服务器Docker,前提是需要idea的Docker插件连接了服务器Docker

image-20230719101335308

问题出现

WindowsDocker运行的微服务连接不了服务器跑的nacos

解决:使用IP访问,并且在bootstrap.yml中设置spring.cloud.nacos.discovery.ip=服务器IP

如果是Linux版本的话就可以使用Network=host的本机模式来直接使用宿主机的端口,但是Windows不行,WindowsServer版本的Docker只有两种模式

image-20230719101827935

DockerFile启动与Docker-Compose启动后的一些区别

Docker-Compose启动后由于未知原因(大概率是openjdk镜像Windows版本)导致输出日志字符集不正确,使用命令行输入chcp输出code为0

DockerFile启动后没有发现这个问题

springboot在WindowsDocker镜像中的编码问题

解决:在所有的获取字节数组和需要字符集的地方指定UTF-8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[SSM]手写Spring框架

目录 十一、手写Spring框架 第一步&#xff1a;创建模块myspring 第二步&#xff1a;准备好要管理的Bean 第三步&#xff1a;准备myspring.xml配置文件 第四步&#xff1a;核心接口实现 第五步&#xff1a;实例化Bean 第六步&#xff1a;给Bean属性赋值 第七步&#xff…

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释 RTSP &#xff08;Real-Time Streaming Protocol&#xff09; 是一种网络协议&#xff0c;用于控制实时流媒体的传输。它是一种应用层协议&#xff0c;通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求&#xff0c;如…

【Java基础教程】(四十二)多线程篇 · 上:多进程与多线程、并发与并行的关系,多线程的实现方式、线程流转状态、常用操作方法解析~

Java基础教程之多线程 上 &#x1f539;本节学习目标1️⃣ 线程与进程&#x1f50d;关于多进程、多线程、并发与并行之间的概念关系&#xff1f; 2️⃣ 多线程实现2.1 继承 Thread 类2.2 实现 Runnable 接口2.3 多线程两种实现方式的区别2.4 利用 Callable 接口实现多线程2.5 …

00_ubuntu_开发环境的搭建

ubuntu 的版本22.04 2023-07-21 1.卸载firefox dpkg --get-selections |grep firefox // 查看安装包的信息 sudo apt-get purge firefox firefox-locale-en firefox-locale-zh-hans // 卸载相应的包 2.下载google安装包并安装 wget https://dl.google.com/linux/direct/goo…

深度学习——过拟合和Dropout

基本概念 什么是过拟合&#xff1f; 过拟合&#xff08;Overfitting&#xff09;是机器学习和深度学习中常见的问题之一&#xff0c;它指的是模型在训练数据上表现得很好&#xff0c;但在未见过的新数据上表现较差的现象。 当一个模型过度地学习了训练数据的细节和噪声&#…

【多模态】17、CORA | 将 CLIP 使用到开集目标检测

文章目录 一、背景二、方法2.1 总体结构2.2 region prompting2.3 anchor pre-matching 三、效果 论文&#xff1a;CORA: Adapting CLIP for Open-Vocabulary Detection with Region Prompting and Anchor Pre-Matching 代码&#xff1a;https://github.com/tgxs002/CORA 出处…

Qt/C++音视频开发48-推流到rtsp服务器

一、前言 之前已经打通了rtmp的推流&#xff0c;理论上按照同样的代码&#xff0c;只要将rtmp推流地址换成rtsp推流地址&#xff0c;然后格式将flv换成rtsp就行&#xff0c;无奈直接遇到协议不支持的错误提示&#xff0c;网上说要换成rtp&#xff0c;换了也没用&#xff0c;而…

Linux 学习记录54(ARM篇)

Linux 学习记录54(ARM篇) 本文目录 Linux 学习记录54(ARM篇)一、框图分析1. 芯片手册内部框图2. 操作GPIO过程 二、通过汇编完成GPIO操作1. 常用的汇编指令2. GPIO初始化流程3. 查找相关寄存器(1. RCC寄存器(2. GPIO寄存器>1. 模式配置寄存器>2. 输出模式配置寄存器>3…

Jenkins常用管理功能配置 - 插件管理

Jenkins插件介绍 Jenkins是一个流行的开源持续集成/持续交付(CI/CD)工具&#xff0c;它有大量的插件来扩展其功能。这些插件可以用于构建、测试、部署和监控软件项目。下面是一些常用的Jenkins插件及其简单介绍和使用方法&#xff1a; 1. Git插件&#xff1a;允许Jenkins从Gi…

vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

1.引入两个依赖 npm i html2canvas npm i jspdf 2.在utils文件夹下新建html2pdf.js文件 import html2canvas from html2canvas; import jsPDF from jspdf export const htmlToPDF async (htmlId, title "报表", bgColor "#fff") > { let pdfDom do…

【LeetCode每日一题合集】2023.7.17-2023.7.23(离线算法 环形子数组的最大和 接雨水)

文章目录 415. 字符串相加&#xff08;高精度计算、大数运算&#xff09;1851. 包含每个查询的最小区间⭐⭐⭐⭐⭐解法1——按区间长度排序 离线询问 并查集解法2——离线算法 优先队列 874. 模拟行走机器人&#xff08;哈希表 方向数组&#xff09;918. 环形子数组的最大和…

sentinel深入讲解流量控制/熔断降级

文章目录 sentinelsentinel介绍重要的核心概念引入依赖限流的规则熔断规则yaml 项目配置使用注解 SentinelResource讲解类的静态方法 sentinel sentinel介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构…

【深度学习之YOLO8】环境部署

目录 一、确定版本CUDA toolkit、cuDNN版本Python、PyTorch版本 二、安装Python下载环境变量验证安装 三、安装Anaconda安装环境变量验证安装创建conda虚拟环境常用命令 四、安装CUDA toolkit下载环境变量验证安装 五、配置cuDNN下载 六、安装PyTorch(torchtorchversiontorchau…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

RUST腐蚀基因种植

RUST腐蚀基因种植 试验地址:www.xiaocao.cloud RUST基因: RUST基因计算器&#xff0c;腐蚀基因计算器&#xff0c;前后端分离架构&#xff0c;前端目录/resouce/ui/rust&#xff0c;欢迎大佬评价&#xff0c;

算法笔记(java)——回溯篇

回溯算法解决问题最有规律性&#xff0c;借用一下卡哥的图&#xff1a; 只要遇到上述问题就可以考虑使用回溯&#xff0c;回溯法的效率并不高&#xff0c;是一种暴力解法&#xff0c;其代码是嵌套在for循环中的递归&#xff0c;用来解决暴力算法解决不了的问题&#xff0c;即…

Tensorflow无人车使用移动端的SSD(单发多框检测)来识别物体及Graph的认识

环境是树莓派3B&#xff0c;当然这里安装tensorflow并不是一定要在树莓派环境&#xff0c;只需要是ARM架构就行&#xff0c;也就是目前市场上绝大部分的嵌入式系统都是用这套精简指令集。 在电脑端的检测&#xff0c;有兴趣的可以查阅SSD(Single Shot MultiBox Detector)系列&a…

19 QListWidget控件

Tips: 对于列表式数据可以使用QStringList进行左移一块输入。 代码&#xff1a; //listWidget使用 // QListWidgetItem * item new QListWidgetItem("锄禾日当午"); // QListWidgetItem * item2 new QListWidgetItem("汗滴禾下土"); // ui->…

十、正则表达式详解:掌握强大的文本处理工具(二)

文章目录 &#x1f340;多字符匹配&#x1f340;匹配规则的代替&#x1f340;特殊的匹配&#x1f340;特殊的匹配plus&#x1f340;总结 &#x1f340;多字符匹配 星号&#xff08;*&#xff09;&#xff1a;匹配0个或者多个字符 import retext 111-222-333 result re.matc…

苹果的Apple GPT要来了?

据外媒消息&#xff0c;苹果正在内部开发类 ChatGPT 的产品&#xff0c;与微软、OpenAI、谷歌、Meta 等科技巨头在生成式 AI 赛道展开竞争。该消息使得苹果股价上涨了 2%。据苹果工程师透露&#xff0c;苹果在内部构建了代号为“Ajax”的大语言模型开发框架&#xff0c;并构建了…