摘要:本文主要介绍了如何用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. 1.3Hadoop版本说明

  2. switch-case 选择语句

    0. 语句模型 Go 里的选择语句模型是这样的 switch 表达式 { case 表达式1: 代码块 case 表达式2: 代码块 case 表达式3: 代码块 case 表达式4: 代码块 cas ...

  3. ssh 远程执行命令 nohup 无效问题

    昨夜1:00多准备睡觉了,突然一哥们咨询了我一个问题. 他A机器上远程执行B机器(ssh user@ip "command")上的脚本,B上的服务并没有起来. 看了下截图,脚本确实 ...

  4. Linux 虚拟机绑定静态 IP

    环境介绍 Machine: NUC8i5BEK OS: macOS Catalina 10.15.6 VirtualBox: 6.1.12 r139181 (Qt5.6.3) CentOS: 8.2. ...

  5. SQLSERVER如何在子查询中使用ORDER BY

    今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序, 于是在这个SQL中添加了ORDER BY,但是得到的结果 ...

  6. Python-维护排序好的序列模块-bisect

    bisect模块 处理已经排序的序列,升序,从小到大,分插入数据和查看插入数据的位置两大核心,类似于插入排序算法 插入数据 # 首先这个序列按升序规则已经排序好的 # 查找规则是二分查找,当数据相等的 ...

  7. 分享一些比较好用的(免费)网站及推荐理由 SMARK

    分享一些比较好用的(免费)网站及推荐理由 --By SMARK 资源类 这里面是一些有供下载的资源的网站等 视频 片库 内容怎么样有待考证 蓝光网 看着还行, 打赏收入 预告片世界 还行, 收入有待考 ...

  8. 谈谈数据库的事务ACID

    在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况. ...

  9. Java知识系统回顾整理01基础04操作符01算术操作符

    一.算数操作符类别 基本的有: + - * / % 自增 自减: ++ -- 二.基本算数操作符 + - * / 基本的加 减 乘 除 public class HelloWorld { public ...

  10. winfrom加载自定义控件、窗口pannel后闪烁问题

    我用一个panel当容器,里面有好多控件,加载的时候一直闪烁. 借鉴网友的思路: 窗口初始化界面加入代码 this.DoubleBuffered = true;//设置本窗体   SetStyle(C ...