这是给 CNB云开发环境 用的容器镜像,基础镜像基于 Fedora 43。
云平台提供的系统镜像大多面向服务器,软件版本保守;开发环境却需要更新工具链。 CNB云开发环境支持远程容器开发,本项目维护一套分层构建的 dockerfile,用于产出可在 CNB 直接使用的 Fedora 开发镜像。
tool/ 下的小脚本,dockerfile 里直接调用,简洁明了docker build 命令的构建环境./
├── starter/ # 地基:换国内源,装基础包和编译工具
├── sideway/ # 旁路:下源码编东西,产出文件在镜像里边,给主链路 COPY --from
├── trunkway/ # 主干道:集成环境,出最终镜像,能在 CNB云开发环境 直接用
├── tool/ # 工具脚本:封装常用的安装、下载、配置操作
├── dotfile/ # 配置文件:各种开发工具的配置文件,构建时拷贝进镜像
├── buildimg.sh # 镜像构建脚本
└── mock.sh # 顶层构建控制(构建所有组件)
starter/:基础起点层,所有构建流程的起点
tool/ 下的脚本供后续步骤使用sideway/:解耦组件层,耗时长且更新不频繁的步骤
code-server.dockerfile:构建 code-server(VS Code Web版,4.117.0)dumb-init.dockerfile:构建 dumb-init(进程管理)ssh.dockerfile:下载源码重新打包 ssh 相关 rpm 包(Fedora 的 sshd 强制依赖 audit,在容器中无法使用)trunkway/:主干整合层,最终产出可运行的容器镜像
tool/download_golang.sh)tool/:工具脚本目录
pkg_install.sh:封装 dnf 安装命令,自动重试download_golang.sh:下载安装指定版本的 golangbuild_python.sh:源码编译安装指定版本的 pythonwget_download.sh:封装 wget 下载,支持多个镜像源重试set_sshd.sh:修改 sshd 配置add_ssh_key.sh:添加 SSH 密钥npm_install.sh:npm 安装封装cnbrcode.sh:CNB 环境相关配置(欢迎信息、别名等)dotfile/:配置文件目录
root/.vimrc:Vim 配置root/.config/nvim/init.lua:Neovim 配置root/.config/helix/config.toml:Helix 配置root/.zshrc:Zsh 配置root/.tmux.conf:Tmux 配置root/.screenrc:Screen 配置root/.config/pip/pip.conf:Pip 配置root/.commonshrc:公共 shell 配置etc/profile.d/add_path.sh:路径配置项目根目录已放好 .cnb.yml,推送 main 分支即触发 CNB 自动构建,默认只重新构建有变动的 dockerfile。
构建顺序:starter → sideway(并行)→ trunkway
触发条件:
.citrigger 更新 → 触发全部 dockerfile 重新构建starter/、sideway/、trunkway/ 子目录下的 .citrigger 更新 → 仅触发该子目录内所有 dockerfile 重新构建.md)的变更不会触发构建# 起个名字,不填默认 localhost/cnbdev
export ProjImageName=my-fedora
# 构建基础层
./buildimg.sh starter
# 构建旁路组件(可并行)
./buildimg.sh sideway
# 构建最终镜像
./buildimg.sh trunkway
# 构建单个 dockerfile
./buildimg.sh sideway/code-server.dockerfile
./buildimg.sh sideway/dumb-init.dockerfile
./buildimg.sh sideway/ssh.dockerfile
# 设置镜像名称
export ProjImageName="docker.cnb.cool/squorm/cnb-ydev-fedora"
# 构建并推送
push=1 ./buildimg.sh starter
push=1 ./buildimg.sh sideway
push=1 ./buildimg.sh trunkway
./mock.sh all
在 trunkway/final.dockerfile 中使用 tool/download_golang.sh 安装:
RUN /tool/download_golang.sh 1.26.2
脚本会自动:
/opt/golang/<version>/(同时软链接到 /opt/golang/latest)/etc/profile.d/mygoenv.sh如需多个 Go 版本并存,在 dockerfile 中多次调用即可,每次调用会在
/opt/golang/<version>/安装独立版本,latest软链接指向最后安装的版本。
当前镜像中未启用,
tool/build_python.sh脚本已就绪,可根据需要手动启用。
该脚本支持从源码编译安装指定版本的 Python:
/tool/build_python.sh 3.11.9 # 安装 Python 3.11.9
/tool/build_python.sh 3.13.1 # 安装 Python 3.13.1
/tool/build_python.sh 2.7.18 # 安装 Python 2.7.18
脚本会自动:
/opt/extrapy/<version>//etc/profile.d/extrapy.sh)注意:Python 从源码编译耗时较长,建议在 sideway 层执行。
在 trunkway/final.dockerfile 中使用 dnf 安装:
RUN /tool/pkg_install.sh nodejs npm
配置文件统一放在 dotfile/ 目录,构建时会自动拷贝进镜像:
.cnb.yml:$:
vscode:
- runner:
cpus: 4
docker:
image: docker.cnb.cool/squorm/cnb-ydev-fedora:latest # 我构建的,可直接用,也可换成你自己的镜像地址
services:
- vscode
- docker
env:
CNB_WELCOME_CMD: "/tool/cnbrcode.sh"
stages:
- name: cnb-welcome
script: "timeout 30 code-server --install-extension cnbcool.cnb-welcome || :"
官方文档戳这里:CNB 云开发环境文档
# 启动容器测试
docker run -it --rm docker.cnb.cool/squorm/cnb-ydev-fedora:latest /bin/zsh
# 测试 python
docker run -it --rm docker.cnb.cool/squorm/cnb-ydev-fedora:latest /bin/bash -c 'python3 --version'
# 测试 golang
docker run -it --rm docker.cnb.cool/squorm/cnb-ydev-fedora:latest go version
# 测试 nodejs
docker run -it --rm docker.cnb.cool/squorm/cnb-ydev-fedora:latest node --version
# 测试 code-server
docker run -it --rm -p 8080:8080 docker.cnb.cool/squorm/cnb-ydev-fedora:latest code-server --version
tool/build_python.sh 从源码编译,耗时较长,建议在 sideway 层处理.md)变更不会触发 CI/CD 构建镜像已推 docker.cnb.cool/squorm/cnb-ydev-fedora:latest,latest 即最新,直接引用即可。