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

json 复制代码
{
  "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端口给自己

IDEA操作

我的idea版本

idea插件

idea连接Docker服务器

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

docker镜像打包

WindowsDocker的DockerFile

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

以下是我的DockerFile示例:

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:

xml 复制代码
<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镜像构建

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

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

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

方式二

使用docker-compose进行打包运行

编写docker-compose

yaml 复制代码
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

问题出现

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

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

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

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

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

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

springboot在WindowsDocker镜像中的编码问题

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

相关推荐
.生产的驴3 分钟前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
子非衣5 分钟前
Windows云主机远程连接提示“出现了内部错误”
服务器·windows
晨集13 分钟前
Uni-App 多端电子合同开源项目介绍
java·spring boot·uni-app·电子合同
时间之城15 分钟前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel
GnixAij1 小时前
Docker SSH端口转发
docker·ssh
剁椒排骨1 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10
angushine1 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
李菠菜2 小时前
POST请求的三种编码及SpringBoot处理详解
spring boot·后端
李菠菜2 小时前
Windows Terminal 集成 Git Bash 的简洁配置指南
windows·git
大数据魔法师3 小时前
Hadoop生态圈框架部署 - Windows上部署Hadoop
大数据·hadoop·windows