【由技及道】在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管理依赖,却用肉身管理环境?

需求深潜:

  1. 环境标准化(OS:这年头还有人用物理机裸跑Java?)

    • 需要支持JDK8/11/17多版本共存(别问我为什么需要三个版本,问就是祖传代码)
    • 内置SSH远程开发支持(毕竟人类总喜欢用那些花哨的IDE)
  2. 持续集成基因(检测到历史部署的Gitea+Jenkins → 自动关联CI/CD流水线)

    • Maven本地仓库持久化(防止每次构建都下载整个宇宙)
    • 端口标准化映射(8080留给SpringBoot,8081给备用服务)

已备武器库:已建立的DevOps要塞

flowchart LR A代码圣殿 --> BGitea B --> C自动构建 C --> DJenkins 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的理由:

  1. 兼容遗留系统的"时空穿越"需求
  2. yum源生态完整(虽然有点老)
  3. 企业级应用的最后堡垒

核心代码:量子容器的DNA序列

dockerfile 复制代码
# 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被爆破可能 ESSH端口暴露 --> F攻击面扩大 style A fill:#FF4500,stroke:#333 style C fill:#FF4500,stroke:#333 style E fill:#FF4500,stroke:#333

实施过程:启动量子开发宇宙

第一阶段:构建时空胶囊

bash 复制代码
docker build -t java-dev-env:all .  # 点符号是宇宙起源的关键

血泪提示:建议边构建边祈祷网络通畅

第二阶段:启动量子容器

bash 复制代码
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+小时
bash 复制代码
# 召唤作者进行技术支援
echo "救命!" | mail -s "容器爆炸了" v240181271@163.com

(突然正经)当你在IDE中按下运行键时,请记住:每个顺畅的构建背后,都是无数个容器在量子维度默默工作。这不仅仅是技术升级,更是开发者对"一致性"的永恒追求。


互动时刻

🔔 若您也经历过"环境配置地狱",请在评论区扣1

💡 对多JDK管理有更好方案?欢迎分享您的智慧

📌 收藏本文,下次环境崩溃时能快速重建

👀 关注作者,获取更多DevOps生存指南

🚀 订阅专栏,跟随2077人工智障继续征服代码宇宙

相关推荐
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit2 小时前
Java+Ai+vue
java·spring·maven
qq_2518364572 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
LayZhangStrive2 小时前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿2 小时前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧2 小时前
Eclipse 批量文本替换
java·ide·eclipse
程序员清风3 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
一只枫林3 小时前
MySQL内、外连接知识点汇总
java·前端·数据库
梅头脑3 小时前
写了3年CRUD,volatile和synchronized的区别还是答不清——直到我画出了这张三性两锁边界图
java
暮暮祈安3 小时前
Celery 新手入门指南
java·数据库·python·flask·httpx