惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
美团技术团队
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
月光博客
月光博客
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recorded Future
Recorded Future
I
Intezer
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
罗磊的独立博客
V
V2EX
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
A
About on SuperTechFans
Scott Helme
Scott Helme
Vercel News
Vercel News
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
C
CERT Recently Published Vulnerability Notes
G
Google Developers Blog
B
Blog
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
IT之家
IT之家
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
小众软件
小众软件
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
AWS News Blog
AWS News Blog

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周 学习周刊-总第239期-2025年第48周 整理我在静态服务透明代理上的极致求索之路,最后一个你绝想不到 学习周刊-总第238期-2025年第47周 我们输了,但收获颇多 太多了,太多了 学习周刊-总第237期-2025年第46周 学习周刊-总第236期-2025年第45周 学习周刊-总第235期-2025年第44周 二五年国庆二三事 学习周刊-总第234期-2025年第43周 学习周刊-总第233期-2025年第42周 学习周刊-总第232期-2025年第41周 学习周刊-总第231期-2025年第40周 学习周刊-总第230期-2025年第39周 西湖毅行 2025年开源世界逸闻三则 学习周刊-总第229期-2025年第38周 手抄《与妻书》 CNB开发与构建基于docker-cache缓存复用的配置实践心得 学习周刊-总第228期-2025年第37周 父亲善行录 学习周刊-总第227期-2025年第36周 带你认识我之看看我的高中同学录(其二) 学习周刊-总第226期-2025年第35周 带你认识我之看看我的高中同学录(其一) 认识神级MCP工具系列--用anyquery和数据库交互 学习周刊-总第225期-2025年第34周 学习周刊-总第224期-2025年第33周 学习周刊-总第223期-2025年第32周 学习周刊-总第222期-2025年第31周 学习周刊-总第221期-2025年第30周 vuepress-vdoing主题配置自建不蒜子统计 学习周刊-总第220期-2025年第29周 写在博客发表文章1000篇的节点 从claude cli的体验聊聊最大的敌人是我们自己的成见 学习周刊-总第219期-2025年第28周 学习周刊-总第218期-2025年第27周 学习周刊-总第217期-2025年第26周 理论正确,事实错误 学习周刊-总第216期-2025年第25周 学习周刊-总第215期-2025年第24周 学习周刊-总第214期-2025年第23周 学习周刊-总第213期-2025年第22周 学习周刊-总第212期-2025年第21周 从赵心童世锦赛夺冠聊聊我的斯诺克情缘 学习周刊-总第211期-2025年第20周 记录二五年五一之短暂回归家庭 学习周刊-总第210期-2025年第19周 学习周刊-总第209期-2025年第18周 学习周刊-总第208期-2025年第17周 Go开发实践之Gin框架将前端的dist目录embed到二进制 学习周刊-总第207期-2025年第16周 近期关于cobra库的一些实践心得总结 学习周刊-总第206期-2025年第15周 我的嗜好--嗑瓜子 记大宝参加幼儿园组织的清明烈士陵园扫墓活动 学习周刊-总第205期-2025年第14周 学习周刊-总第204期-2025年第13周 前端开发小笔记--在数组中给字段添加值与删除字段的操作 学习周刊-总第203期-2025年第12周 人生实苦,何以自渡 学习周刊-总第202期-2025年第11周 近期发现的一些优秀的工具提名(一) 学习周刊-总第201期-2025年第10周 学习周刊-总第200期-2025年第09周 记一次女友喝醉使我忍术破功 爱情风波--一次分手又复合的经历 学习周刊-总第199期-2025年第08周 整理我的信息源 学习周刊-总第198期-2025年第07周
CNB云原生开发环境届的瑞士军刀,详解qifei项目
二丫讲梵 · 2025-07-24 · via 二丫讲梵

注: 本文首发于: 一个项目,如何让你在CNB天天起飞 (opens new window)

# 背景

在 CNB 中,构建以及开发都是基于云原生环境构筑的,因此镜像成为这些操作的底层环境支撑,默认情况下,官方会以 cnbcool/default-dev-env:latest 作为拉起环境的基础镜像,但这个镜像只做了通用的基础封装,我们可以自己封装一些镜像,来作为开发与构建的基础环境。

打造一个趁手的基础镜像,这是我从接触CNB一开始就在做的事情,经过长时间的打磨与优化,我做出了一个近乎完美的云开发环境,它容纳了大量的效率实践,能涵盖你开发过程中的各种场景,下边我会逐一介绍,带你领略优雅的运维魅力。

# 详解项目

# 简介

项目主页图:

# 如何使用

第一步:Fork 项目

访问开源项目地址:https://cnb.cool/znb/qifei (opens new window),点击右上角 Fork 按钮,将项目复制到你的组织下。

第二步:点击起飞

点击右上角起飞按钮,即可享受该项目。

# 自定义按钮

在 CNB 中,你可以通过 .cnb/settings.yml 配置文件,自定义项目的一些基础信息。我这里定义了ForkIssue以及启动云开发的自定义背景图,配置如下:

workspace:
  launch:
    button:
      name: 🛫 起飞
      description: 💪 逐步迈向运维的四个现代化:规范化,标准化,高效化,优雅化
      hoverImage: .cnb/qifei.gif
    cpus: 16
    disabled: false
    autoOpenWebIDE: false

issue:
  button:
    description: 🙋🏻‍♀️ I Have A Question
    hoverImage: ".cnb/jushou.jpg"

fork:
  button:
    description: 🫵 年轻人,你很眼光
    hoverImage: ".cnb/trump.gif"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

更多配置,详见官方文档:UI 定制 (opens new window)

三个按钮的效果如下:

# 开发语言环境

项目镜像默认提供了 golang 和 nodejs 的开发环境,对应版本信息分别如下:

同时两个工具是基于nvm和gvm集成的,因此,如果临时开发项目版本不合适,可通过这两个工具快速切换版本。

因个人常用开发语言是这两个,因此默认集成了这两个语言,欢迎使用其他语言开发的同学,参考当前项目,定制贡献其他语言的环境。

# 终端支持 Oh My ZSH

即便是临时使用的 VScode 终端,也不能将就。

于是,经过一番探索,我把本地终端提效利器 Oh My ZSH 集成到了云开发环境中。

配置定义如下:

# set bash to zsh
RUN sh -c "$(wget -O- https://github.com/deluan/zsh-in-docker/releases/download/v1.2.1/zsh-in-docker.sh)" -- \
    -t https://github.com/skylerlee/zeta-zsh-theme \
    -p https://github.com/paulirish/git-open \
    -p git -p ssh-agent -p 'history-substring-search' -p z -p wd \
    -p sudo -p extract -p hitokoto -p colored-man-pages -p docker -p docker-compose \
    -p https://github.com/zsh-users/zsh-autosuggestions \
    -p https://github.com/zsh-users/zsh-syntax-highlighting \
    -p https://github.com/zdharma-continuum/fast-syntax-highlighting \
    chsh -s /bin/zsh root

RUN  echo 'exec zsh' >> /root/.bashrc &&\
     echo '# custom alias' > ~/.aliases.zsh &&\
     echo 'alias src="source ~/.zshrc"' >> ~/.aliases.zsh &&\
     echo 'alias cl="clear"' >> ~/.aliases.zsh &&\
     echo 'alias bash="zsh"' >> ~/.aliases.zsh &&\
     echo 'alias gop="git-open"' >> ~/.aliases.zsh &&\
     echo 'alias dp="docker ps"'  >> ~/.aliases.zsh &&\
     echo 'alias di="docker images"'  >> ~/.aliases.zsh &&\
     echo 'alias cdw="cd /workspace"'  >> ~/.aliases.zsh &&\
     echo 'alias docker-compose="docker compose"'  >> ~/.aliases.zsh &&\
     echo 'alias ll="ls -lhtr"'  >> ~/.aliases.zsh &&\
     echo 'alias ..="cd .."'  >> ~/.aliases.zsh &&\
     echo 'alias ...="cd ../.."'  >> ~/.aliases.zsh &&\
     echo 'alias g="git"' >> ~/.aliases.zsh &&\
     echo 'alias ping="docker run --rm --network host docker.cnb.cool/znb/images/alpine ping "' >> ~/.aliases.zsh &&\
     echo 'alias gping="docker run --rm -ti --network host docker.cnb.cool/znb/images/gping "' >> ~/.aliases.zsh &&\
     echo "alias openw='python3 -m webbrowser \"\$CNB_VSCODE_WEB_URL\"'" >> ~/.aliases.zsh &&\
     echo "alias openv='python3 -m webbrowser \"\$CNB_VSCODE_REMOTE_SSH_SCHEMA\"'" >> ~/.aliases.zsh &&\
     echo 'open() { python3 -m webbrowser "http://localhost:$1"; }' >> ~/.aliases.zsh &&\
     echo 'openr() { python3 -m webbrowser "$(echo "${CNB_VSCODE_PROXY_URI//\{\{port\}\}/$1}")"; }' >> ~/.aliases.zsh &&\
     echo "alias opendoc='python3 -m webbrowser https://cnb.cool/znb/qifei/-/issues/3'" >> ~/.aliases.zsh &&\
     echo 'source ~/.aliases.zsh' >> ~/.zshrc

# 添加以下RUN命令来填充历史命令
RUN echo ': 1751940881:0;vim Dockerfile' >> /root/.zsh_history && \
    echo ': 1751940882:0;vim docker-compose.yaml' >> /root/.zsh_history && \
    echo ': 1751940883:0;docker-compose up -d' >> /root/.zsh_history && \
    echo ': 1751940884:0;docker ps -a' >> /root/.zsh_history && \
    echo ': 1751940885:0;open 8888' >> /root/.zsh_history

CMD [ "/bin/zsh" ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

我在定义环境时集成了一些 alias 快捷命令,具体内容可看上边内容,这里捡一些比较典型的介绍下,让你了解并用起来:

  • cl:执行 clear 命令,清除当前屏幕终端上的任何信息。
  • gop:执行git-open命令,功能是在CNB打开当前项目。顺便说一句,这个功能是我提交的反馈,详见:https://cnb.cool/cnb/feedback/-/issues/450 (opens new window)
  • di, dp:docker 相关的一些快捷别名。
  • cdw:无论你在环境中去了哪里,执行之后让你回到工作目录。
  • .....:无需写入 cd,直接往上层和上上层目录返回。
  • openw:表示打开当前项目的WebIDE界面,如果你当前在vscode界面中,想要跳转打开WebIDE界面,通常需要先到CNB中点击个人头像然后点击我的云原生开发,找到项目的WebIDE按钮,点击跳转。而有了这个别名,一条命令就让你实现跳转。
  • openv:如上同理,如果你当前所在位置是WebIDE中,此时想要打开vscode远程开发,那么可以直接执行openv命令进行跳转,而不用再去个人主页查找。(实测发现对应变量的渲染需要通过vscode打开过之后才会生成)
  • open:表示从本地打开要访问的端口。比如执行:open 8888 则表示在浏览器打开http://localhost:8888
  • openr:表示从远程监听打开要访问的端口。比如执行:openr 8888则表示在浏览器打开 https://parye2fki0-8888.cnb.run/

    当前,在WebIDE中打开远程访问端口,还需要进行二次确认,这个问题会在不久的将来发版中解决,让你真正一键打开。关于此功能的讨论,详见:https://cnb.cool/cnb/feedback/-/issues/1183 (opens new window)

  • opendoc:打开当前文档。如果你想详细了解这个项目有哪些最佳实践,可以通过opendoc打开文档来浏览。

默认安装了这些插件:git-open, git, ssh-agent, history-substring-search, z, wd, sudo, extract, hitokoto, colored-man-pages, docker, docker-compose, zsh-autosuggestions, zsh-syntax-highlighting, fast-syntax-highlighting,挑一些比较有代表性的来介绍下。

  • zsh-autosuggestions:一个提供输入建议的插件。因为输入建议是基于历史命令来渲染的,为了让你新开环境时可以直接用一些常用操作,我把一些常用的几个 docker 拉起项目的操作写到了历史命令,这样打开终端之后,你可以直接执行,获得提醒,如下图,灰色部分是智能提示的候选内容。
  • extract:任何压缩包,都可以在终端中,用 x 命令解压。
  • zsh-syntax-highlighting:终端美化效果,自动对不同内容着色。
  • z:zsh中强大的跳转插件,它自动解析历史执行过的cd命令,当你下次想要切换到哪个目录,通过 z 关键字 就能跳转。

之所以把这个终端环境打造的如此舒服,就是因为 CNB 的优势在于,它不仅给我们提供了临时的开发环境,还几乎给我们提供了一台随时可用的服务器,如果想要做什么实验,或者搭建什么临时环境,都可以在这个临时服务器上完成,用完销毁即刻,也不用担心因为不熟悉把本地环境搞坏。

# 丰富的开发工具

一个优雅的开发环境,怎能少了常用的数据库等环境,别急,qifei 仓库已为你贴心集成。

假如你现在开发的项目需要一个 MySQL 环境,只需如下命令:

只需要两条命令,依赖的 MySQL 环境,就已到位。

除了 MySQL,还集成了 Redis,MongoDB,PostgreSQL 几个数据库,均可在 README 中看到:

再分享下我是如何实现拉起环境,就能快速跳转的,上文介绍过 z 这个插件,并且 z 还提供了一个 --add 指令,用于将指定目录填写到列表中,于是,我在 .cnb/vscode.yml 中做了如下定义:

      stages:
        - name: start
          script: |
            current_time=$(date +%s)
            find /workspace/letsfly -mindepth 1 -maxdepth 2 -type d | while read dir
            do
              echo "$dir|1000|$current_time"
            done >> /root/.z

1
2
3
4
5
6
7
8

用于把提供的工具快捷方式写入到列表,使得这些项目均可以通过 z 关键字 的方式,跳转到对应目录。目录列表如下:

# database 插件

上边介绍了数据库的拉起,同时我也在环境中集成了 mysql 等命令行客户端,但这仍然非常低效,不符合我们高效的宗旨。

别急,vscode 的插件 database 解你忧,它支持如下截图中的中间件连接管理,几乎涵盖了你开发场景中能遇到的所有存储。

插件提供付费订阅的计划,不过免费版限制最多 3 个连接,对我们临时开发环境来说,足够使用了。

# 各种优秀开源项目即刻体验

除了开发环境的集成,项目还内置了一批个人感觉很不错的开源项目的 compose,可供一键拉起,快速体验。

目前配置的项目列表如下:

你如果还有更好玩的项目,欢迎提交 PR 贡献你的项目。

# one more thing

除了如上介绍的各种摆在面上的可以利用的提效工具之外,qifei 还内置了不少优秀的工具,奉献给懂的人。

air:go 语言编写的热加载工具,开发 go 语言项目的时候,可以直接使用。 upx:优秀的二进制压缩工具,无论是在云原生开发还是云原生构建环境中,都可以直接使用。 gox:go 语言多架构平台二进制并发交叉编译的工具。

gping:更强大的 ping 检测命令。(这个工具通过如上展示过的 alish 命令定义)

运行 gping cnb.run tencent.com eryajf.net,执行效果如下:

dufs:让云开发过程中产生的制品,在本地下载。

# 结语

CNB 是一个开启程序员开发构建新篇章的一个产品,善用各种效率工具,借助其提供的能力,可以实现各种玩法。

欢迎大家来仓库交流更多优秀的玩法。