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: gateway
    environment:
      - TZ=Asia/Shanghai
      - PYTHONIOENCODING=utf-8
    build:
      context: ./fatebug/gateway
      dockerfile: Dockerfile
    ports:
      - "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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于springbootdocker部署微服务架构.zip j360系列之spring-boot微服务架构和docker部署 ##介绍## j360-order底层服务提供接口 使用restAPI提供服务 j360-deliver提供UI操作界面,调用底层j360-order提供服务 构建 Java 1.7+(官方建议1.8) Maven 3.2+ Spring 4.1.3 Spring-boot 1.3.0.BUILD-SNAPSHOT j360 1.0.0.BUILD-SNAPSHOT ##j360-order## 直接使用Spring data jpa,省点力气写dao :) ###两种rest风格### @RepositoryRestResource(collectionResourceRel = "expresss", path = "expresses") +spring.data.rest.base-path=/api http://localhost:8080/api/expresses/1 通过dao层接口映射到api接口,类似于ws,可以查看所有的接口列表及类型 @RestController+@RequestMapping("/expresses") http://localhost:8080/expresses/1 常规rest,推荐 也可以使用hateoas来实现超媒体的rest效果 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency> ##j360-deliver## RestTemplate作为restAPI调用工具,需要定义@Bean ExpressApiService使用netflix.hystrix确保分布式系统的持久性 ###测试## 单元测试 ExperssServiceTest 测试api接口调用实现 测试Hystrix在远程调用中的封装 使用restapi或许order的map属性 1、expressServiceTest 直接或许 2、expressApiTest 封装hystrix进行读取 3、通过aop-hystrix无侵入式读取 MockMvc测试 测试用户界面调用接口 ##j360-profile## hateoas演示案例 hateoas restful
根据你提供的引用内容,Spring Boot是一个用于快速构建基于Java的应用程序的框架。它提供了自动配置和约定优于配置的原则,使开发人员能够快速搭建微服务项目。使用Spring Boot可以简化微服务项目的开发和部署过程,提高开发效率。 在实际的微服务项目实战中,以下是一些常见的步骤和方法: 1. 配置项目依赖和环境: - 导入Spring Boot的依赖,例如spring-boot-starter-web、spring-boot-starter-data-jpa等。 - 配置项目的数据库连接、日志等相关环境。 2. 创建微服务模块: - 根据项目需求,划分不同的功能模块。 - 使用Spring Boot创建各个微服务模块,并进行相应的配置。 3. 定义数据模型: - 根据业务需求,设计和定义相应的数据模型和数据库表结构。 - 使用JPA等技术与数据库进行交互,实现数据的增删改查等操作。 4. 实现业务逻辑: - 在各个微服务模块中实现相应的业务逻辑。 - 使用Spring Boot提供的各类组件和工具,如Spring MVC、Spring Security等,简化开发过程。 5. 配置微服务间的通信: - 使用Spring Cloud等技术实现微服务之间的通信和协作。 - 可以使用服务注册与发现、负载均衡等功能,提高系统的可扩展性和可靠性。 6. 进行单元测试和集成测试: - 编写测试代码,对各个微服务模块进行单元测试和集成测试,确保功能的正确性和稳定性。 7. 部署和监控微服务项目: - 使用Docker等容器技术,将微服务模块打包成可部署的镜像。 - 部署镜像到云平台或服务器上,并进行相应的监控和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FateBug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值