WSL2 + Docker + IDEA 开发到发布一步到位
摘要:本文主要介绍了如何用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 开发到发布一步到位的更多相关文章
- WSL2+Docker+IDEA一站式开发调试
WSL2+Docker+IDEA一站式开发调试 前言 我们知道,Docker是一个容器引擎:对于开发者来说,使用Dokcer容器部署各种开发需要的中间件(比如myql.redis)会非常简单方便: ...
- 如何使用URLOS进行docker应用开发
使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完 ...
- 强强合体:Docker版Kali Linux发布
Kali Linux是一款开源的基于Debian的渗透测试专用操作系统,系统中包含一系列用于渗透测试的神器.最近,Kali的开发者们为喜爱Docker的童鞋们发布了新版本. FreeBuf百科:什么是 ...
- 谁是Docker的开发人员
由CHRIS DAWSON发表在thenewstack/DATA RESEARCH qianhen123/CHB译 我们分析了Docker的容器库并提出两个问题: 1.Docker的贡献者们感兴趣的其 ...
- 腾讯AlloyTeam发布AlloyLever - 开发调试发布错误监控上报用户问题定位尽在1kb代码
AlloyLever [官网][Giuhub] 1kb(gzip)代码搞定开发调试发布,错误监控上报,用户问题定位. 支持错误监控和上报 支持 vConsole错误展示 支持开发阶段使用 vConso ...
- Abp(.NetCore)开发与发布过程
.NetCore 项目开发正当火热,ABP也推出了.NetCore的版本.趁此机会学习.NetCore的开发与发布过程.以下是本人的踩坑经验. 在ABP官网提供单页面应用开发框架(AngularJs) ...
- 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...
- Jenkins集成Docker镜像实现自动发布
1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 -- gitl实现应用打包 -- jenk ...
- [转]利用Docker构建开发环境
利用Docker构建开发环境 Posted by makewonder on 2014 年 4 月 2 日 最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...
随机推荐
- nginx的安装和启动
https://www.cnblogs.com/wyd168/p/6636529.html nginx开机启动 https://www.cnblogs.com/gimin/p/8893559.html
- spring boot 源码之banner
Banner 使用Spring Boot启动的jar包总是会显示一个Spring的图标.实际我们是可以自定义这个图标.Banner接口定义了打印banner的方法. void printBanner( ...
- 刷题[SUCTF 2018]GetShell
解题思路 进入upload,发现有源码,代码审计 代码审计 大概意思就是,读取我们上传的文件,截取第五位之后的内容,与黑名单不匹配才能上传成功 我传的是一个空的txt文件,发现会变成php文件,那好办 ...
- [Abp vNext 源码分析] - 21. 界面与文字的本地化
一.简介 ABP vNext 提供了全套的本地化字符串支持,具体用法可以参考官方使用文档.vNext 本身是对 Microsoft 提供的本地化组件进行了实现,通过 JSON 文件提供本地化源,这一点 ...
- jdk环境配置(Windows)
电脑>属性>高级系统设置>环境变量 1 创建JAVA_HOME,值是你的刚刚jdk的安装目录,比如 C:\Program Files (x86)\Java\jdk1.8.0_101 ...
- 基于vue2定义自己的图表echart组件
先安装echarts cnpm i echarts -S,然后定义父组件 <template> <div> <echarts :option="echartOp ...
- Python-运算符和其优先级
运算符 算数运算符 + - * ** / // % print(4 + 5) print("a" + "b") print([1, 2] + [1, 4]) p ...
- vue安装教程
Vue.js 安装教程 安装node.js https://nodejs.org/zh-cn/download/ 选择一个适合自己电脑的版本下载 下载成功, 直接安装, 全部点击下一步 然后输入 黑窗 ...
- 硬核测试:Pulsar 与 Kafka 在金融场景下的性能分析
背景 Apache Pulsar 是下一代分布式消息流平台,采用计算存储分层架构,具备多租户.高一致.高性能.百万 topic.数据平滑迁移等诸多优势.越来越多的企业正在使用 Pulsar 或者尝试将 ...
- 50个你必须了解的Kubernetes面试问题
Kubernetes一直是当今业界的流行语,也是最好的编排工具.它吸引了许多想要提升自己职业生涯的经验丰富的专业人士.HuaWei,Pokemon,Box,eBay,Ing,Yahoo Japan,S ...