WSL2 + Docker + IDEA 开发到发布一步到位
HiIT青年
2021年03月14日 14:13
收录于文集
共2篇

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

传送门>>


迁移Linux子系统

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

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

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

代码块
JavaScript
自动换行
复制代码
wsl -l --all -v
复制成功

wsl2

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

代码块
JavaScript
自动换行
复制代码
wsl --export Ubuntu-18.04 d:\WSL\Ubuntu18.04.tar
复制成功

ubuntu系统

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

代码块
JavaScript
自动换行
复制代码
wsl --unregister Ubuntu-18.04
复制成功

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

代码块
JavaScript
自动换行
复制代码
wsl --import Ubuntu-18.04 d:\WSL d:\WSL\Ubuntu18.04.tar --version 2
复制成功

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

ubuntu系统

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

代码块
JavaScript
自动换行
复制代码
Ubuntu1804 config --default-user itqn
复制成功


设置WSL2固定IP

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

IP

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

可以创建一个bat脚本来位WSL设置IP地址,每次开机的时候运行这个脚本即可(也可以设置开机自动设置),需要注意的是,这个脚本一定要是Windows管理员身份运行。

bat脚本可关注wx公众号 “HiIT青年” 发送 WSLIP 获取

这样WSL2的Linux子系统中和Windows系统就有了同一个网段的IP,如下面两张图(第一张为Linux IP地址,第二张为Windows IP地址):

WSL,Linux IP地址

Windows IP地址

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


IDEA安装Docker插件

想要在IDEA集成Docker管理功能,就要安装Docker插件,IDEA安装Docker插件跟IDEA安装其他插件是一样的,在Setting->Plugins中搜索安装即可。

IDEA docker插件

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

代码块
JavaScript
自动换行
复制代码
# 开启远程访问 -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进程:

代码块
JavaScript
自动换行
复制代码
$ sudo service docker restart
复制成功

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

idea 配置 docker连接

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

IDEA docker 管理


开发Java应用

这一步跟平时开发Java应用没有任何差别, 这里以一个简单的Say Hi项目为例,创建一个普通的springboot项目,新增一个Rest API接口:

代码块
JavaScript
自动换行
复制代码
@RestController
public class HiController {

    @RequestMapping("/sayHi")
    public String sayHi() {
        return "Hi " + System.currentTimeMillis();
    }
}
复制成功

为java应用编写Dockerfile:

代码块
JavaScript
自动换行
复制代码
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" ]
复制成功


发布部署Java应用

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

IDEA docker java

注意: 这里设置前置任务来用maven编译项目(clean package),运行构建即可自动创建容器并运行。

build

如果构建成功,那么Java应用就发布成功了,可以通过浏览器来访问已发布部署的Java应用:

say hi rest api

至此,就完成了 WSL2 + Docker + IDEA 开发到发布一步到位。