logo
0
0
WeChat Login

🚀 Ultimate Docker Development Environment

这是一个功能完整、生产级的 Docker 开发环境,支持多种编程语言、AI 开发工具和 DevContainer 规范。

✨ 特性

  • 🖥️ 浏览器开发: Code-Server (VS Code in browser)
  • 🐳 Docker-in-Docker: 完全隔离的 Docker 环境(可选)
  • 🔧 多语言支持: Node.js (NVM), Python, Go, Rust, Deno, Bun
  • 🤖 AI 开发工具: Gemini, Claude, CodeBuddy, OpenCode
  • 📦 DevContainer 支持: VSCode "Reopen in Container" 一键启动
  • ⚡ 快捷命令: 一键导入仓库、快速切换项目、自动安装依赖
  • 🔒 安全设计: 非 root 用户运行
  • 🎯 配置提取: 从镜像提取默认配置,保持仓库干净

🚀 快速开始

1. 克隆项目

git clone <your-repo-url>
cd docker-dev-env

2. 初始化环境

⚠️ 【必须】首次使用前必须执行以下两步:

# 步骤 1: 基础初始化(创建 .env 和目录结构)
make init

# 步骤 2: 【关键】从镜像提取默认配置(否则 AI CLI 工具会丢失!)
make init-config

# 步骤 3: 编辑配置
vim .env

为什么要执行 make init-config

  • Docker 卷挂载会覆盖容器内原有内容
  • 如果不提取,镜像中预装的 AI CLI 工具(gemini、claude、codebuddy、opencode)会丢失

重点配置:

  • CS_PASSWORD: Code-Server 登录密码
  • GEMINI_API_KEY: Google Gemini API Key
  • ANTHROPIC_API_KEY: Claude API Key
  • CODEBUDDY_API_KEY: CodeBuddy API Key
  • OPENAI_API_KEY: OpenAI API Key

3. 构建镜像

make build

4. 提取默认配置(⚠️ 关键步骤)

# 从镜像提取默认配置到 data/ 目录
make init-config

为什么需要这一步?

  • data/ 目录包含 VS Code 配置、AI CLI 配置等
  • 这些配置在镜像中预装了默认值
  • 提取到本地后,配置将持久化保存
  • 保持 Git 仓库干净(不提交用户数据)

5. 启动环境

make up

6. 访问开发环境

打开浏览器访问: http://localhost:8080

密码: .env 文件中设置的 CS_PASSWORD


🛠️ 开发快捷命令

进入容器后,可以使用以下快捷命令:

项目导入

# 从 Git 仓库导入项目并自动安装依赖
dev-init-from https://github.com/user/project.git

# 指定本地目录名
dev-init-from https://github.com/user/project.git my-project

# 导入但跳过 LFS 文件(节省时间和空间)
dev-init-from-without-lfs https://github.com/large-files/repo.git

# 设置 LFS 大小限制(默认 100MB)
LFS_MAX_SIZE=256 dev-init-from https://github.com/large-files/repo.git

项目管理

# 列出所有项目
dev-list

# 快速切换到项目
dev-switch project-name

# 显示环境信息
dev-info

开发服务器

# 启动静态文件服务器(默认端口 3000)
dev-serve

# 指定端口
dev-serve 8080

# 创建公网隧道(需要 cloudflared)
dev-tunnel 8080

代码质量

# 格式化代码(自动检测项目类型)
dev-format

# 代码检查
dev-lint

Docker 辅助

# 清理未使用的 Docker 资源
dev-docker-clean

# 查看服务日志
dev-docker-logs [service-name]

备份和恢复

# 完整备份开发环境
dev-backup

# 指定备份名称
dev-backup my-backup

# 恢复备份
dev-restore backups/dev-backup-20250215_120000.tar.gz

帮助

# 显示所有快捷命令
dev-help

📋 预装工具

编程语言

语言版本说明
Node.jsv22 (默认)通过 NVM 安装,可切换版本
Python3.12系统级安装
Go1.23系统级安装
Rust1.93通过 rustup 安装
Deno2.6+系统级安装
Bun1.3+系统级安装

开发工具

基础工具(Ubuntu 系统 + 微软基础镜像):

• git + git-lfs          # 版本控制
• zsh + oh-my-zsh       # Shell(已配置插件)
• openssh-server        # SSH 服务端
• openssh-client        # SSH 客户端
• rsync                 # 文件同步
• curl + wget           # 下载工具
• vim + nano            # 文本编辑器
• jq                    # JSON 处理

额外安装工具

• pnpm                  # 包管理器(Node.js)
• fzf                   # 模糊搜索
• ripgrep               # 代码搜索(rg)
• fd-find               # 文件查找(fd)
• bat                   # 语法高亮 cat
• eza                   # 现代 ls
• tree                  # 目录树
• htop                  # 系统监控
• unzip + p7zip-full    # 解压工具
• net-tools             # 网络工具(ifconfig 等)

AI CLI 工具

gemini          # Google Gemini CLI
claude          # Anthropic Claude Code
codebuddy       # 腾讯 CodeBuddy
opencode        # OpenCode AI

使用方法:

# 进入容器
make enter

# 登录 AI 工具
gemini login
claude login
codebuddy login
opencode login

🎮 Make 命令参考

初始化和配置

make init              # 基础初始化(创建 .env 和目录结构)
make init-config       # ⚠️ 从镜像提取默认配置(首次运行前【必须】执行)
make init-config-force # 强制重新提取配置(覆盖现有配置)

构建和运行

make build             # 构建镜像
make build-no-cache    # 重新构建(无缓存)
make up                # 启动环境(后台)
make up-fg             # 启动环境(前台,查看日志)
make down              # 停止环境
make restart           # 重启环境

调试和监控

make logs              # 查看所有日志
make logs-dev          # 查看开发环境日志
make enter             # 进入容器 shell(zsh)
make enter-root        # 以 root 身份进入容器
make status            # 查看容器状态
make health            # 检查健康状态

开发工具

make versions          # 查看所有语言版本
make python            # 进入 Python 交互式环境
make node              # 查看 Node.js 版本信息
go                     # 查看 Go 版本
rust                   # 查看 Rust 版本
deno                   # 查看 Deno 版本
bun                    # 查看 Bun 版本

维护

make clean             # 停止并删除容器
make clean-all         # 完全清理(包括镜像和数据卷)
make backup            # 完整备份开发环境配置
make restore           # 查看可用备份
make restore-file      # 恢复指定备份 (用法: make restore-file BACKUP_FILE=backups/xxx.tar.gz)
make update            # 更新镜像(拉取最新基础镜像)

📁 目录结构

docker-dev-env/
├── .devcontainer/           # DevContainer 配置
│   └── devcontainer.json
├── data/                    # 持久化配置(首次需运行 make init-config)
│   ├── code-server/         # VS Code 配置和扩展
│   ├── config/              # AI CLI 和工具配置
│   └── pnpm-store/          # pnpm 包缓存
├── workspace/               # 你的项目代码 (可通过 .env 中的 WORKSPACE_PATH 配置)
├── backups/                 # 配置备份
├── scripts/                 # 辅助脚本
│   ├── init.sh              # 基础初始化
│   ├── dev-init-config.sh   # 配置提取
│   ├── dev-init-from        # 一键导入仓库
│   ├── dev-commands.sh      # 快捷命令集合
│   ├── dev-welcome.sh       # 欢迎页面
│   ├── dev-backup.sh        # 完整备份功能
│   └── dev-restore.sh       # 恢复功能
├── .env                     # 环境变量配置
├── docker-compose.yaml      # Docker Compose 配置
├── Dockerfile               # 镜像构建文件
├── entrypoint.sh            # 容器启动脚本
├── Makefile                 # 便捷命令
└── README.md                # 本文档

持久化数据

⚠️ 【重要】首次使用前必须执行此步骤!

如果跳过此步骤,会导致以下致命问题

  • AI CLI 工具(gemini、claude、codebuddy、opencode)丢失
  • VS Code 配置和扩展丢失
  • pnpm 全局包缓存丢失

执行命令

make init-config

以下数据会持久化保存:

  • ./workspace - 你的项目代码 (可通过 .env 中的 WORKSPACE_PATH 配置)
  • ./data/code-server - VS Code 设置和扩展
  • ./data/config - 工具配置(Git、AI CLI 登录状态等)
  • ./data/pnpm-store - pnpm 全局包缓存

注意: 编程语言环境(Node.js、Python、Go、Rust 等)已预装在 Docker 镜像中,重启容器不会丢失。


🔧 DevContainer 支持

本项目完整支持 VSCode DevContainer:

本地开发

  1. 在 VSCode 中安装 "Dev Containers" 扩展
  2. 打开项目文件夹
  3. Ctrl+Shift+P,选择 "Dev Containers: Reopen in Container"
  4. 自动构建并进入开发环境

GitHub Codespaces

  • 直接在浏览器中打开开发环境
  • 无需本地安装 Docker

💾 备份和恢复

完整备份

# 备份所有配置(VSCode、AI CLI 配置、项目文件等)
make backup

备份内容包含:

  • data/code-server/ - VS Code 配置和扩展
  • data/config/ - AI CLI 和工具配置
  • workspace/ - 项目代码 (通过 WORKSPACE_PATH 配置)

恢复配置

# 查看可用备份
make restore

# 恢复指定备份
make restore-file BACKUP_FILE=backups/dev-backup-20250215_120000.tar.gz

🐳 Docker-in-Docker(可选)

如需在容器内使用 Docker,取消 docker-compose.yaml 中 DinD 部分的注释:

# 取消注释以下部分启用 DinD
docker:
  image: docker:24-dind
  privileged: true

然后重启环境:

make down
make up

在容器内使用 Docker:

docker ps
docker build -t myapp .
docker run -d myapp

🎨 自定义配置

添加 VSCode 扩展

编辑 .devcontainer/devcontainer.json

"customizations": {
    "vscode": {
        "extensions": [
            "your.extension.here"
        ]
    }
}

添加系统包

编辑 Dockerfile

RUN apt-get update && apt-get install -y \
    your-package \
    && rm -rf /var/lib/apt/lists/*

自动执行欢迎命令

.env 中设置:

WELCOME_CMD="git config --global user.name 'Your Name' && git config --global user.email 'your@email.com'"

🔐 安全配置

修改 Code-Server 密码

编辑 .env

CS_PASSWORD=your_secure_password

重启生效:

make restart

API Keys 配置

推荐方式(环境变量):

  1. .env 中设置 API Keys
  2. 启动时自动加载到容器

替代方式(手动登录):

make enter
gemini login
claude login

🐛 故障排除

权限问题

make enter
sudo chown -R vscode:vscode /workspace
sudo chown -R vscode:vscode ~/.local/share/code-server

配置提取失败

# 确保镜像已构建
make build

# 强制重新提取
make init-config-force

容器无法启动

# 查看详细日志
make logs

# 检查端口占用
lsof -i :8080

# 查看容器状态
make status
make health

AI CLI 工具无法使用

# 进入容器
make enter

# 检查工具是否安装
which gemini claude codebuddy opencode

# 手动登录
gemini login

📝 更新日志

v1.1.0 (2025-02-15)

  • ✨ 新增 dev-init-from 一键导入仓库命令
  • ✨ 新增快捷命令集合(dev-list, dev-switch, dev-serve 等)
  • ✨ 新增自动欢迎页面(登录终端自动显示)
  • ✨ 新增配置提取脚本(make init-config
  • 🔧 优化镜像大小(4.51GB)
  • 🔧 使用系统 Python 替代 Miniforge
  • 🔧 清理 data/ 目录结构

v1.0.0 (2025-02-15)

  • ✨ 初始版本发布
  • 🐳 支持 Docker-in-Docker
  • 🤖 集成 AI CLI 工具
  • 📦 支持 DevContainer 规范
  • 🔧 多语言开发环境

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

🙏 致谢

About

🚀 功能完整的 Docker 开发环境,支持 Code-Server 浏览器开发、多语言运行时(Node.js/Python/Go/Rust/Deno/Bun)、AI CLI 工具(Gemini/Claude/CodeBuddy/OpenCode)和 DevContainer 规范。一键导入仓库、自动安装依赖、配置持久化保存。

dockerdevcontainercode-servernodejspythongolangclaude-codeopencodegemini-clicodebuddy
dev-envrepo-named
Language
Shell67.7%
Makefile18.3%
Dockerfile14.1%