首页 技术 正文
技术 2022年11月15日
0 收藏 630 点赞 4,656 浏览 2513 个字

摘要:本文主要介绍了如何用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.jarENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezoneEXPOSE 8888
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]

5. 一键发布部署

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

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

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

访问Java应用

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899