摘要:本文主要介绍了如何用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:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.9.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

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” 获取。



关注公众号,阅读更多文章。

WSL2 + Docker + IDEA 开发到发布一步到位的更多相关文章

  1. WSL2+Docker+IDEA一站式开发调试

    WSL2+Docker+IDEA一站式开发调试 前言 ​ 我们知道,Docker是一个容器引擎:对于开发者来说,使用Dokcer容器部署各种开发需要的中间件(比如myql.redis)会非常简单方便: ...

  2. 如何使用URLOS进行docker应用开发

    使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完 ...

  3. 强强合体:Docker版Kali Linux发布

    Kali Linux是一款开源的基于Debian的渗透测试专用操作系统,系统中包含一系列用于渗透测试的神器.最近,Kali的开发者们为喜爱Docker的童鞋们发布了新版本. FreeBuf百科:什么是 ...

  4. 谁是Docker的开发人员

    由CHRIS DAWSON发表在thenewstack/DATA RESEARCH qianhen123/CHB译 我们分析了Docker的容器库并提出两个问题: 1.Docker的贡献者们感兴趣的其 ...

  5. 腾讯AlloyTeam发布AlloyLever - 开发调试发布错误监控上报用户问题定位尽在1kb代码

    AlloyLever [官网][Giuhub] 1kb(gzip)代码搞定开发调试发布,错误监控上报,用户问题定位. 支持错误监控和上报 支持 vConsole错误展示 支持开发阶段使用 vConso ...

  6. Abp(.NetCore)开发与发布过程

    .NetCore 项目开发正当火热,ABP也推出了.NetCore的版本.趁此机会学习.NetCore的开发与发布过程.以下是本人的踩坑经验. 在ABP官网提供单页面应用开发框架(AngularJs) ...

  7. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  8. Jenkins集成Docker镜像实现自动发布

    1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...

  9. [转]利用Docker构建开发环境

    利用Docker构建开发环境 Posted by  makewonder on 2014 年 4 月 2 日   最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...

随机推荐

  1. Django request

    ''' 1.HttpRequest.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数.详情请参考 QueryDict 对象. 2.HttpRequest.POST 一个类似于字典的对象 ...

  2. Python爬虫练习:爬取800多所大学学校排名、星级等

    前言 国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八 时隔五年,"双一流"大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人的 ...

  3. python语言开发环境配置

    原作者:龙行天下-super 地址:https://www.cnblogs.com/longxingtianxia/p/10181901.html 要点:IDLE是一个轻量级python语言开发环境, ...

  4. MySQL手注之联合查询注入

    了解联合查询注入之前,先要了解一下什么是union? union是用于合并两个sql查询结果的语句. 要使用union 必须有相同的列数  必须有两条以上的select语句组成  列的数据类型必须兼容 ...

  5. 关于人人开源renren-fast-vue 中npm install各种报错的解决方案

    首先吐槽一下,因为这个问题我整了好几天,把报错信息复制百度,试遍了各种方法,node.js我是卸载了安装,安装了卸载,甚至renren-fast-vue我也删了再下,然后再删,无限循环.然而没有什么软 ...

  6. spark 四种模式

    Spark 三种运行模式  一:Spark On Local     此种模式下,我们只需要在安装Spark时不进行hadoop和Yarn的环境配置,只要将Spark包解压即可使用,运行时Spark目 ...

  7. mysql-7-join

    #进阶7:连接查询 /* 多表连接:查询的字段来自多个表 按功能分类: 内连接: 等值连接 非等值连接 自连接 外连接: 左外连接 右外连接 全外连接 交叉连接 */ USE girls; SELEC ...

  8. 音频数据增强及python实现

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/13404523.html 音频时域波形具有以下特征:音调,响度,质量.我们在进行数据增强时,最好只 ...

  9. Lyndon Word相关

    Lyndon Word 定义 对于字符串 \(S\),若 \(S\) 的最小后缀为其本身,那么称 \(S\) 为 \(\text{Lyndon}\) 串(\(\text{Lyndon Word}\)) ...

  10. Arduino 多线程简单代码

    转载: 1.   https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html 2.   https://v.youku.com/v_show/id ...