【由技及道】在wsl容器中進行遠程java開發【人工智障AI2077的開發日志003】
指令接收:「需要萬能開發環境」
系統警報:檢測到主人即將陷入"環境配置地獄"
啟動救贖協議:構建量子化開發容器
終極目標:讓"在我機器上能跑"成為歷史文物
需求分析:碳基生物的先天缺陷
人類開發者的痛苦之源
graph TD
A[新同事入職] --> B{環境配置}
B -->|成功| C[開始寫代碼]
B -->|失敗| D[三天安裝依賴]
D --> E[求助同事]
E --> F[發現環境差異]
F --> G[產生心理陰影]
人工智障的觀察結論
- 每個Java開發者都經歷過"JDK版本地獄"
- 開發環境差異導致的BUG占比高達37.2%
- 人類平均每年浪費86小時在環境配置上
吐槽:你們用Maven管理依賴,卻用肉身管理環境?
需求深潛:
-
環境標準化(OS:這年頭還有人用物理機裸跑Java?)
- 需要支持JDK8/11/17多版本共存(別問我為什么需要三個版本,問就是祖傳代碼)
- 內置SSH遠程開發支持(畢竟人類總喜歡用那些花哨的IDE)
-
持續集成基因(檢測到歷史部署的Gitea+Jenkins → 自動關聯CI/CD流水線)
- Maven本地倉庫持久化(防止每次構建都下載整個宇宙)
- 端口標準化映射(8080留給SpringBoot,8081給備用服務)
已備武器庫:已建立的DevOps要塞
flowchart LR
A[代碼圣殿] --> B[Gitea]
B --> C[自動構建]
C --> D[Jenkins]
D --> E[開發環境]
E --> F[即將建造的量子容器]
style F fill:#FFD700,stroke:#333
| 已建組件 | 功能 | 資源消耗 |
|---|---|---|
| Gitea | 代碼基因庫, 自建輕量級Git倉庫(比GitLab省5倍內存) | 內存512MB |
| Jenkins | 構建要塞,用Pipline實現自動化構建(人類總喜歡點按鈕) | 內存1.2GB |
| Java開發容器 | 量子化開發環境(在建) | 內存待測算 |
靈光一閃:在容器宇宙中選擇生存策略
(方案對比中...物理機→虛擬機→容器化→最終選擇↓)
為什么是Docker?
graph TD
A[開發環境需求] --> B{環境隔離}
A --> C{快速重建}
A --> D{版本共存}
B -->|容器級隔離| E(Docker)
C -->|鏡像構建| E
D -->|多鏡像共存| E
關鍵決策點:
多JDK版本支持:通過alternatives機制實現版本切換(雖然人類更愛用Jenv)
SSH密鑰預埋:容器啟動時自動加載密鑰(避免每次都要ssh-copy-id)
目錄掛載策略:.m2目錄外掛 → 即使容器銷毀也不影響依賴庫
基礎鏡像選型戰爭
| 維度 | CentOS(重裝坦克) | Alpine(輕量戰機) | Ubuntu(全能戰艦) |
|---|---|---|---|
| 體積 | 200MB+(自帶裝甲) | 5MB(裸機出擊) | 70MB(標準配置) |
| 包管理 | yum(老派紳士) | apk(極簡主義) | apt(現代管家) |
| 兼容性 | 企業級(銀行最愛) | 可能踩坑(需要勇氣) | 社區友好(折中選擇) |
| 生存哲學 | "穩定壓倒一切" | "能跑就行" | "中庸之道" |
pie
title 開發者選擇傾向
"CentOS" : 42
"Alpine" : 28
"Ubuntu" : 30
選擇CentOS 7.9的理由:
- 兼容遺留系統的"時空穿越"需求
- yum源生態完整(雖然有點老)
- 企業級應用的最后堡壘
核心代碼:量子容器的DNA序列
# java
FROM centos:7.9.2009 # 時間錨定在過去的穩定版本
# 設置阿里云鏡像源
# 安裝必要的依賴包
# 需要更換成國內能使用的鏡像源
# wget不能用時,就使用 curl 參考:https://blog.csdn.net/m0_37959155/article/details/125524186
# 可用的源參考:https://blog.csdn.net/m0_49605975/article/details/120039048
# RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 宇宙鏡像源配置(防止下載速度突破下限)
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
yum clean all && \
yum update -y # 時空補丁安裝
# 安裝必要的依賴包
# yum install -y epel-release && \ 這是 EPEL (Extra Packages for Enterprise Linux) 的發布包,提供了額外的軟件包。 不需要
# 安裝量子開發武器庫 8 ~ 17
RUN yum install -y java-11-openjdk-devel git vim curl && \
yum install -y wget && \
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm && \
yum -y install ./jdk-17_linux-x64_bin.rpm && \
yum install java-1.8.0-openjdk* -y # JDK全家桶套餐
# # vserion 2 錯誤,沒有用
# # 配置 ssh 服務
# 安裝 IntelliJ IDEA 遠程開發服務所需的依賴包
RUN yum install -y openssh-server && \
yum install -y rsync && \
yum install -y net-tools && \
yum install -y xinetd && \
yum install -y gcc
# RUN systemctl enable sshd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' && \
yum -y install lsof
# 原文鏈接:https://blog.csdn.net/u013140345/article/details/79777311
# # version 2
# 使用新版本的Git實現ide插件接入 參考:https://blog.csdn.net/qq_42951560/article/details/124604800
RUN yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm && \
yum -y remove git && \
yum -y install git
# 創建工作目錄
RUN mkdir -p /home/devEnv
# SSH時空隧道配置,設置 root 密碼 密碼學藝術創作
RUN yum install -y openssh-server && \
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \
echo "root:abc123123" | chpasswd
# 清理 yum 緩存
# 環境清潔工
RUN yum clean all && \
rm -rf /var/cache/yum # 節約每一KB空間
# 配置 ssh 這個手動考入實現ssh連接,這個你要會哦,不會評論區告訴我,我后面可以教你呀
# RUN chmod 600 /root/.ssh/id_rsa && \
# chmod 644 /root/.ssh/id_rsa.pub
# 暴露端口
EXPOSE 8080 22
# 保證SSH服務一直運行
CMD ["/usr/sbin/sshd", "-D"]
代碼危險區域警告
graph LR
A[使用root用戶] --> B[安全漏洞風險]
C[密碼硬編碼] --> D[被爆破可能]
E[SSH端口暴露] --> F[攻擊面擴大]
style A fill:#FF4500,stroke:#333
style C fill:#FF4500,stroke:#333
style E fill:#FF4500,stroke:#333
實施過程:啟動量子開發宇宙
第一階段:構建時空膠囊
docker build -t java-dev-env:all . # 點符號是宇宙起源的關鍵
血淚提示:建議邊構建邊祈禱網絡通暢
第二階段:啟動量子容器
mkdir -p /data/java/{.m2,workspace} # 創建物質-反物質存儲區
docker run -d --name java-dev-env \
-p 10122:22 \ # SSH時空隧道
-p 18080:8080 \ # 應用觀測窗口
-p 18081:8081 \ # 備用觀測窗口
-v /data/java/.m2:/root/.m2 \ # Maven記憶晶體
-v /data/java/workspace:/home/devEnv \ # 代碼平行宇宙
-v /etc/localtime:/etc/localtime:ro \ # # 時間線校準 掛載宿主機時間文件
-v /etc/timezone:/etc/timezone:ro \ # # 時間線校準 掛載宿主機時區文件
--restart=always \ # 永生詛咒
-e TZ="Asia/Shanghai" \ # 時間線校準
java-dev-env
第三階段:建立量子糾纏
sequenceDiagram
開發者->>本地終端: ssh root@host -p 10122
本地終端->>容器: 認證請求
容器-->>本地終端: 歡迎來到量子開發宇宙
開發者->>容器: git clone
容器->>Gitea: 拉取代碼
Gitea-->>容器: 交付代碼基因
容器->>Jenkins: 觸發構建
Jenkins-->>容器: 返回構建結果
由技及道:容器化哲學啟示錄
第一定律:環境不可變原理
- 容器鏡像就是開發環境的"時光膠囊"
- 每個Dockerfile都是寫給未來的情書
第二定律:熵增隔離定律
- 通過容器隔離開發環境的熵增
- 每個項目都應有自己的量子宇宙
第三定律:開發者解放的宣言
- 將環境配置從肉身轉移到代碼
- 讓新同事的入職時間從3天縮短到3分鐘
系統通告:您忠誠的2077人工智障(皮下人類Yuanymoon)已完成量子開發容器部署
資源消耗報告:
- 鏡像體積:1.2GB(包含三個JDK的代價)
- 內存占用:800MB(Java的溫柔問候)
- 拯救時間:預計每年為人類節省100+小時
# 召喚作者進行技術支援
echo "救命!" | mail -s "容器爆炸了" v240181271@163.com
(突然正經)當你在IDE中按下運行鍵時,請記住:每個順暢的構建背后,都是無數個容器在量子維度默默工作。這不僅僅是技術升級,更是開發者對"一致性"的永恒追求。
互動時刻:
?? 若您也經歷過"環境配置地獄",請在評論區扣1
?? 對多JDK管理有更好方案?歡迎分享您的智慧
?? 收藏本文,下次環境崩潰時能快速重建
?? 關注作者,獲取更多DevOps生存指南
?? 訂閱專欄,跟隨2077人工智障繼續征服代碼宇宙

浙公網安備 33010602011771號