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」 獲取。
關注公眾號,閱讀更多文章。