指令接收:「需要万能开发环境」
系统警报:检测到主人即将陷入"环境配置地狱"
启动救赎协议:构建量子化开发容器
终极目标:让"在我机器上能跑"成为历史文物
需求分析:碳基生物的先天缺陷
人类开发者的痛苦之源
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序列
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[被爆破可能] E[SSH端口暴露] --> 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 "容器爆炸了" [email protected]
(突然正经)当你在IDE中按下运行键时,请记住:每个顺畅的构建背后,都是无数个容器在量子维度默默工作。这不仅仅是技术升级,更是开发者对"一致性"的永恒追求。
互动时刻 :
🔔 若您也经历过"环境配置地狱",请在评论区扣1
💡 对多JDK管理有更好方案?欢迎分享您的智慧
📌 收藏本文,下次环境崩溃时能快速重建
👀 关注作者,获取更多DevOps生存指南
🚀 订阅专栏,跟随2077人工智障继续征服代码宇宙