Skip to content

Commit 847d366

Browse files
author
ide-coder
committed
feat: add vim, dnsutils tools and fix ruby command accessibility
- Add vim editor and dnsutils (nslookup) to system tools - Create symlinks for ruby/gem/rails/bundler to /usr/local/bin - Update README.md and AGENTS.md documentation - Add Git workflow section to AGENTS.md
1 parent b878607 commit 847d366

3 files changed

Lines changed: 215 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
# IDE Code Server - 项目上下文
2+
3+
## 项目概述
4+
5+
这是一个基于 `codercom/code-server` 构建的综合性开发环境 Docker 镜像项目,预配置了多种编程语言运行时和中国大陆镜像加速。目标是为开发者提供一个开箱即用的云端 IDE 环境。
6+
7+
### 核心特性
8+
9+
- **基础镜像**: `codercom/code-server:latest`
10+
- **用户权限**: `coder` 用户,支持无密码 sudo(已禁用 su 命令)
11+
- **多语言支持**: Go、Python 3.13、Node.js 22 LTS、JDK 21、Ruby 3.4.1
12+
- **开发工具**: git、curl、wget、vim、dnsutils (nslookup)、yq、kubectl、gopls、delve、golangci-lint、uv、conda、pnpm、yarn、Maven、Rails
13+
- **镜像加速**: 所有语言包管理器均配置中国大陆镜像源
14+
15+
## 项目结构
16+
17+
```
18+
ide-code-server/
19+
├── Dockerfile # 主构建文件(多层单阶段构建)
20+
├── README.md # 使用文档
21+
├── .dockerignore # Docker 构建排除文件
22+
├── .github/
23+
│ └── workflows/
24+
│ └── build-and-push.yml # CI/CD 多架构构建流程
25+
└── docs/
26+
└── plans/ # 设计与规划文档
27+
├── 2026-03-02-ide-code-server-design.md
28+
└── 2026-03-02-ide-code-server.md
29+
```
30+
31+
## 构建与部署
32+
33+
### 本地构建
34+
35+
```bash
36+
# 构建镜像
37+
docker build -t ide-code-server .
38+
39+
# 本地运行
40+
docker run -d \
41+
--name ide-code-server \
42+
-p 8080:8080 \
43+
-v $(pwd)/data:/home/coder \
44+
-e PASSWORD=yourpassword \
45+
ide-code-server:latest
46+
```
47+
48+
### CI/CD 流程
49+
50+
项目使用 GitHub Actions 实现自动化构建和发布:
51+
52+
- **触发条件**: 推送到 `master` 分支 或手动触发
53+
- **构建平台**: `linux/amd64`, `linux/arm64`(并行构建)
54+
- **镜像仓库**: GitHub Container Registry (`ghcr.io`)
55+
- **标签策略**:
56+
- `latest` - 最新版本(仅 master 分支)
57+
- `sha-xxxxxx` - 短提交哈希
58+
- `YYYYMMDD` - 日期标签
59+
60+
### 多架构构建策略
61+
62+
使用 matrix 策略实现并行多平台构建:
63+
1. 各平台独立构建并推送 digest
64+
2. 合并阶段创建多架构 manifest
65+
3. 最终镜像支持 `linux/amd64``linux/arm64`
66+
67+
## Dockerfile 分层结构
68+
69+
Dockerfile 采用精心设计的分层结构以优化缓存效率:
70+
71+
|| 内容 | 缓存优化考虑 |
72+
|---|------|-------------|
73+
| Layer 1 | 系统工具 (git, curl, wget, vim, dnsutils, yq, kubectl) | 变更频率最低 |
74+
| Layer 2 | 用户权限配置 (sudo) | 基础配置 |
75+
| Layer 3 | Go 1.24.0 + gopls + delve + golangci-lint | 独立语言环境 |
76+
| Layer 4 | Python 3.13 + uv + Miniforge (conda) | 独立语言环境 |
77+
| Layer 5 | Node.js 22 LTS + npm/pnpm/yarn | 独立语言环境 |
78+
| Layer 6 | JDK 21 (Temurin) + Maven 3.9.11 | 独立语言环境 |
79+
| Layer 7 | Ruby 3.4.1 (rbenv) + Rails | 独立语言环境 |
80+
| Layer 8 | 目录结构 + 镜像配置文件 | 变更频率最高 |
81+
82+
## 镜像源配置
83+
84+
所有包管理器均已配置中国大陆镜像加速:
85+
86+
| 语言/工具 | 镜像源 | 配置位置 |
87+
|----------|--------|----------|
88+
| Go | goproxy.cn | 环境变量 `GOPROXY` |
89+
| Python (pip/uv) | pypi.tuna.tsinghua.edu.cn | `~/.config/pip/pip.conf`, 环境变量 `UV_INDEX_URL` |
90+
| conda | conda-forge (默认) | Miniforge 默认配置 |
91+
| Node.js (npm/pnpm/yarn) | npmmirror | `~/.npmrc` |
92+
| Maven | 阿里云 | `~/.m2/settings.xml` |
93+
| Ruby (gem) | Ruby China | `~/.gemrc` |
94+
95+
## 容器内目录结构
96+
97+
```
98+
/home/coder/
99+
├── project/ # 工作区(主要挂载点)
100+
├── .local/share/code-server/ # VS Code 扩展目录
101+
├── .m2/settings.xml # Maven 配置
102+
├── .npmrc # npm 配置
103+
├── .gemrc # gem 配置
104+
├── .config/pip/pip.conf # pip 配置
105+
├── go/ # Go GOPATH
106+
└── .rbenv/ # Ruby 版本管理
107+
```
108+
109+
## 开发约定
110+
111+
### Dockerfile 编写规范
112+
113+
1. **分层原则**: 按变更频率从低到高排列层,优化构建缓存
114+
2. **清理缓存**: 每个 `apt-get``curl` 安装后清理缓存文件
115+
3. **架构支持**: 使用 `$(dpkg --print-architecture)` 动态检测架构
116+
4. **用户切换**: 在 Dockerfile 末尾切换回 `coder` 用户
117+
118+
### Git 提交规范
119+
120+
使用 Conventional Commits 格式:
121+
122+
- `feat:` 新功能
123+
- `fix:` Bug 修复
124+
- `docs:` 文档更新
125+
- `chore:` 杂项(构建配置等)
126+
127+
### CI/CD 注意事项
128+
129+
- 镜像名称必须小写(GHCR 要求)
130+
- 使用 `visudo -c` 验证 sudoers 配置语法
131+
- 多架构构建需要矩阵策略和 manifest 合并
132+
133+
### Git 工作流
134+
135+
项目使用以下 Git 工作流程:
136+
137+
#### 分支策略
138+
139+
- `master` - 主分支,受保护,通过 PR 合并
140+
- 功能开发:直接在 `master` 分支提交或创建 feature 分支
141+
142+
#### 日常开发流程
143+
144+
```bash
145+
# 1. 拉取最新代码
146+
git pull origin master
147+
148+
# 2. 查看当前状态
149+
git status
150+
151+
# 3. 添加修改的文件
152+
git add <files>
153+
# 或添加所有更改
154+
git add -A
155+
156+
# 4. 提交(使用 Conventional Commits 格式)
157+
git commit -m "feat: 添加 vim 和 dnsutils 工具"
158+
git commit -m "fix: 修复 ruby 命令找不到的问题"
159+
git commit -m "docs: 更新文档"
160+
161+
# 5. 推送到远程
162+
git push origin master
163+
```
164+
165+
#### 提交类型规范
166+
167+
| 类型 | 说明 | 示例 |
168+
|-----|------|------|
169+
| `feat` | 新功能 | `feat: 添加 vim 编辑器支持` |
170+
| `fix` | Bug 修复 | `fix: 修复容器内 ruby 命令无法识别` |
171+
| `docs` | 文档更新 | `docs: 更新 README 工具列表` |
172+
| `chore` | 构建/工具变更 | `chore: 升级 Go 版本到 1.24` |
173+
| `refactor` | 代码重构 | `refactor: 优化 Dockerfile 分层结构` |
174+
| `test` | 测试相关 | `test: 添加构建验证测试` |
175+
176+
#### CI/CD 自动触发
177+
178+
- 推送到 `master` 分支自动触发构建
179+
- 构建成功后自动推送到 `ghcr.io`
180+
- 生成 `latest``sha-xxxxxx``YYYYMMDD` 三种标签
181+
182+
## 快速参考命令
183+
184+
```bash
185+
# 查看镜像构建历史
186+
docker history ide-code-server:latest
187+
188+
# 进入容器调试
189+
docker run -it --rm ide-code-server:latest bash
190+
191+
# 查看多架构镜像信息
192+
docker buildx imagetools inspect ghcr.io/fjiayang/ide-code-server:latest
193+
194+
# 本地构建特定平台
195+
docker buildx build --platform linux/amd64 -t ide-code-server:amd64 .
196+
197+
# 手动触发 CI 构建
198+
gh workflow run build-and-push.yml
199+
```
200+
201+
## 相关链接
202+
203+
- [code-server 官方文档](https://coder.com/docs/code-server/latest)
204+
- [Eclipse Temurin JDK](https://adoptium.net/)
205+
- [Miniforge (conda-forge)](https://github.com/conda-forge/miniforge)
206+
- [uv Python 包管理器](https://docs.astral.sh/uv/)

Dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
88
git \
99
curl \
1010
wget \
11+
vim \
12+
dnsutils \
1113
ca-certificates \
1214
gnupg \
1315
lsb-release \
@@ -135,6 +137,12 @@ RUN /home/coder/.rbenv/plugins/ruby-build/install.sh \
135137
&& RBENV_ROOT=/home/coder/.rbenv /home/coder/.rbenv/bin/rbenv global 3.4.1 \
136138
&& RBENV_ROOT=/home/coder/.rbenv /home/coder/.rbenv/shims/gem install bundler rails --no-document
137139

140+
# Create symlinks for ruby, gem, rails to system path (ensures commands work in all shells)
141+
RUN ln -sf /home/coder/.rbenv/shims/ruby /usr/local/bin/ruby \
142+
&& ln -sf /home/coder/.rbenv/shims/gem /usr/local/bin/gem \
143+
&& ln -sf /home/coder/.rbenv/shims/rails /usr/local/bin/rails \
144+
&& ln -sf /home/coder/.rbenv/shims/bundler /usr/local/bin/bundler
145+
138146
# Configure gem mirror
139147
RUN echo "---\n:sources:\n - https://gems.ruby-china.com/" > /home/coder/.gemrc
140148

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ A comprehensive development environment Docker image based on code-server, pre-c
77
- **Base**: codercom/code-server:latest
88
- **User**: `coder` with passwordless sudo (su blocked)
99
- **Languages**: Go, Python 3.13, Node.js, JDK 21, Ruby/Rails
10-
- **Tools**: git, yq, kubectl, gopls, uv, conda, pnpm, yarn, Maven
10+
- **Tools**: git, curl, wget, vim, dnsutils (nslookup), yq, kubectl, gopls, uv, conda, pnpm, yarn, Maven
1111

1212
## Quick Start
1313

0 commit comments

Comments
 (0)