摘要:本文主要介绍了如何用WSL2、Docker、IDEA将Java应用从开发到发布一步到位。

上次介绍了如何在Windows(WSL2) Linux子系统中搭建搭建Docker环境,这次将利用上次搭建的Docker环境实现Java应用从开发到发布一步到位。

.>>> Windows(WLS2)Linux子系统搭建Docker环境(传送门)

1. 迁移Linux子系统(非必要)

在Windows启用WSL2功能后,默认情况下,在Microsoft store安装的Linux系统(Ubuntu)是在系统盘中(C盘),但是一般来说系统盘的容量是由限的,所以下载安装Linux子系统后的第一步就是迁移Linux子系统。

(如未作特殊说明,下面的命令在power shell运行)

首先查看已安装的Linux子系统,我的电脑只装了一个Ubuntu18.04,如下:

wsl -l --all -v

将Linux子系统导出到磁盘中(D盘)

wsl --export Ubuntu-18.04 d:\WSL\Ubuntu18.04.tar

注销当前Linux子系统(Ubuntu-18.04)

wsl --unregister Ubuntu-18.04

重新导入Linux子系统,指定导入位置为D盘的WSL目录,WSL版本为2

wsl --import Ubuntu-18.04 d:\WSL d:\WSL\Ubuntu18.04.tar --version 2

导入成功之后D盘的WSL目录下面将会出现一个ext4.vhdx文件,这个就是Linux子系统。

最后设置默认的登录用户名,这个命令好像只能在cmd命令行执行(不知道为什么)

Ubuntu1804 config --default-user itqn

2. 为WSL2设置固定IP

Windows的WSL有个坑,那就是每一次启动的时候IP地址都是随机生成的。

这对开发来说就很难受,所以要想使用WSL2作为开发环境的一部分首先要解决的问题就是为WSL设置一个固定IP。

这里可以创建一个bat脚本,每次开机的时候运行这个脚本即可(也可以设置开机自动设置),脚本获取方式在文章底部,需要注意的是,这个脚本一定要是Windows管理员身份运行。

这样WSL2的Linux子系统中和Windows系统就有了同一个网段的IP了,如下图:

设置固定IP之后,访问WSL只需要使用固定的192.168.50.110即可,不需要知道WSL随机生成的IP是什么。

3. IDEA安装Docker插件

IDEA安装Docker插件跟IDEA安装其他插件是一样的,在Setting->Plugins中搜索安装即可。

为了IDEA的Docker插件能连接到WSL的Docker,需要打开WSL的Docker 2375端口远程访问,编辑/etc/default/docker

修改如下配置:

# 开启远程访问 -H tcp://0.0.0.0:2375

# 开启本地套接字访问 -H unix:///var/run/docker.sock

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

重启Docker进程:

$ sudo service docker restart

在IDEA配置Docker远程连接,Build->Docker,配置对应WSL的IP即可连接Docker,如下图:

连接Docker之后就可以查看和管理Docker镜像和容器, 如下图:

4. 开发Java应用

这一步跟平时开发Java应用没有任何差别, 这里以一个简单的Say Hi项目为例。

项目pom.xml:

org.springframework.boot

spring-boot-starter-parent

2.0.9.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-maven-plugin

Rest API接口:

@RestController

public class HiController {

@RequestMapping("/sayHi")

public String sayHi() {

return "Hi " + System.currentTimeMillis();

}

}

Dockerfile:

FROM java:openjdk-8-jdk-alpine

ADD target/*.jar app.jar

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone

EXPOSE 8888

ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]

5. 一键发布部署

Java应用开发完成后, 只需要创建Docker构建即可一键发布应用, 构建配置如下:

注意: 这里设置前置任务来用maven编译项目(clean package)

运行构建即可自动创建容器并运行

访问Java应用

=========================================================

WSL设置固定IP的脚本可关注公众号 “HiIT青年” 发送 “WSLIP” 获取。

关注公众号,文章。

wsl Java开发_WSL2 + Docker + IDEA 开发到发布一步到位相关推荐

  1. 游戏开发 应用Docker实现开发环境

    作者简介:陈霈霖,金山西山居资深Unity开发工程师,Unity开发框架KSFramework作者,关注Web开发全栈.DevOps最近,跟一个大学金融系的同学交流,发现他对科技发展的动态非常了解,然 ...

  2. 『高级篇』docker之开发课程EdgeService(16)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发课程EdgeService(16) 课程的edgeService依赖于课程服务的dubbo服务,对 ...

  3. 『高级篇』docker之开发用户服务EdgeService(13)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之开发用户服务EdgeService(13) 上一节开发了用户服务,即将开发的是用户服务EdgeServ ...

  4. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  5. 钉钉需要什么java知识_Java钉钉开发_01_开发前的准备

    源码已上传GitHub:传送门 一.准备事项 1.1  一个能在公网上访问的项目: 1.2  一个钉钉账号 1.3 创建一个应用 登录钉钉后台->工作台->自建应用 二.钉钉的配置参数 2 ...

  6. Java新手看招 常用开发工具介绍

    Java新手看招 常用开发工具介绍 Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使 ...

  7. java ug二次开发_使用Java进行UG二次开发:简单的例子(上) | 学步园

    最近因为要进行TeamCenter二次开发(胖客户端定制),所有要开始研究Java了.因此突发奇想为什么不能使用Java进行二次开发呢?现在对UG进行的开发以C/C++应用为主.大多数使用的是原来的U ...

  8. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  9. 利用Docker构建开发环境

    最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...

  10. Java程序员转Android开发必读经验

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

最新文章

  1. Go语言调度器之调度main goroutine(14)
  2. 一个可供参考的Java高并发异步应用案例--转
  3. 配置isc-dhcrelay需要注意的事项
  4. 训练集样本不平衡问题对CNN的影响
  5. js能否打印服务器端文档,js打印远程服务器文件
  6. 【Java基础总结】网络编程
  7. IO多路复用(番外篇)、poll、epoll三者的区别
  8. python实现梳排序
  9. 全球及中国晶圆锯划片刀行业发展态势及投资潜力预测报告2021-2027年
  10. CMMI认证的周期是多久?费用是多少?
  11. MATLAB数据拟合(附代码)
  12. ppt保存为高分辨率图片(ppt2016)
  13. mysql CONCAT函数 用于隐藏银行卡号码
  14. 刚开始有点紧张,闪送第一单
  15. securecrt下传输大文件
  16. 傅里叶变换-平稳信号
  17. 【MFC】CSplitterWnd 重载限定窗口调整范围
  18. 需求分析阶段的各个步骤
  19. patchca实现验证码验证
  20. 单片机开发应用技术综合实验装置

热门文章

  1. 基于yolov3的水下目标检测(百度飞浆实现)
  2. FinClip 3 月产品小报:新功能上线小程序一键生成 App
  3. PowerVR SDK记录
  4. 通过rgb值判断颜色深浅
  5. coffeescript_在客户端上使用CoffeeScript
  6. 服务器3D场景建模(三):体素场景(一)
  7. 报错:TracerWarning: Output nr 1. of the traced function does not match the corresponding output of the
  8. matlab ga初始值,matlab之GA优化.pdf
  9. python大批量读写.doc文件的解决方案
  10. (Linux目录操作命令)零基础小白学习_入门到精通03 程序员阿沐