容器运行时云原生网络【免费下载链接】rkt[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.项目地址https://gitcode.com/gh_mirrors/rk/rkt点击查看免费下载本篇指南以 rktApp Container 规范的参考实现为背景带你从零开始体验完整的容器应用生命周期编写一个自包含的 Go HTTP 应用、静态编译、用 acbuild 打包成 ACIApp Container Image、本地启动并用curl验证最后补齐签名、验证、信任与 Meta Discovery 分发这一整套安全发布链路。读完本文你将掌握构建一个无外部依赖、可签名分发、可被 rkt 安全拉取运行的容器镜像的全部实战技能。环境准备Linux 与构建前提rkt 运行于 Linux。如果你不在 Linux 环境官方建议在 rkt 提供的 Vagrant 虚拟机内完成本指南中的全部操作。整个流程不依赖 Docker而是围绕 App Container 规范。本指南的核心任务链路如下编写并静态编译一个 Go 应用使用acbuild将其打包为 ACI通过rkt run启动容器用rkt list与curl验证服务使用 gpg 签名 ACI通过 Meta Discovery 分发并借助rkt trust建立信任后安全拉取运行。第一步编写一个 hello Go 应用创建一个 HTTP 服务它监听:5000端口对每个请求打印来源地址并返回hellopackage main import ( log net/http ) func main() { http.HandleFunc(/, func(w http.ResponseWriter, r *http.Request) { log.Printf(request from %v\n, r.RemoteAddr) w.Write([]byte(hello\n)) }) log.Fatal(http.ListenAndServe(:5000, nil)) }第二步构建一个静态链接的 Go 二进制为了让 ACI 不携带任何外部依赖必须静态链接二进制。使用 Go 1.9 及以上的标准编译方式$ CGO_ENABLED0 go build -ldflags -extldflags -static如果你使用 gccgo 编译器则改为$ go build -compiler gccgo -gccgoflags -static继续之前务必确认产物确实是静态链接的。用file与ldd验证$ file hello hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped $ ldd hello not a dynamic executable看到statically linked与not a dynamic executable说明二进制已完全静态化可以安全地封进 ACI。第三步用 acbuild 创建 ACI 镜像acbuild是构建 ACI 的专用工具可以从 containers/build 仓库的 release 页面下载。下面这组命令会生成一个名为hello-0.0.1-linux-amd64.aci的镜像其中包含应用二进制与关键的镜像元数据acbuild begin acbuild set-name example.com/hello acbuild copy hello /bin/hello acbuild set-exec /bin/hello acbuild port add www tcp 5000 acbuild label add version 0.0.1 acbuild label add arch amd64 acbuild label add os linux acbuild annotation add authors Carly Container carlyexample.com acbuild write hello-0.0.1-linux-amd64.aci acbuild end上述每一步的含义set-name为镜像命名。名称采用 URL 式结构后续可用于 Meta Discovery 与按名拉取copy把静态二进制放进镜像根文件系统的/bin/helloset-exec声明容器启动时要执行的程序port add www tcp 5000声明应用暴露的端口www是端口名协议为tcp端口 5000label add version/arch/os写入版本、架构、操作系统标签——rkt 在按名发现镜像时会用{os}、{arch}、{version}去替换下载模板中的占位符annotation add authors附加镜像元信息write写出 ACI 文件end结束本次构建会话。第四步运行本地 ACI启动容器# rkt --insecure-optionsimage run hello-0.0.1-linux-amd64.aci这里必须携带--insecure-optionsimage因为 rkt 默认要求镜像带有 gpg 签名见签名与验证指南。该标志仅针对这一次运行关闭镜像签名校验。它在 全局选项表 中还有http、tls、pubkey、capabilities、paths、seccomp等更细粒度选项all-fetch/all-run/all则可成组关闭。此时 hello 应用已经运行并可以响应 HTTP 请求。要停止容器连续输入三个转义字符^]^]^]在美式键盘上由Ctrl-]三次产生也可以把 rkt 交给 init 系统以守护方式运行详见 run 子命令文档 中 systemd 与 daemon 的用法。用 curl 验证服务默认情况下 rkt 会为容器分配一个 IP 地址用rkt list查看# rkt list UUID APP IMAGE NAME STATE NETWORKS 885876b0 hello example.com/hello:0.0.1 running default:ip4172.16.28.2然后直接 curl 该 IP 的 5000 端口$ curl 172.16.28.2:5000 hello可以看到输出正是应用写入的hello容器网络与进程完全正常。rkt list的列项UUID 截断、APP、IMAGE NAME、STATE、NETWORKS由 rkt/list.go 实现它会遍历数据目录下的全部 pod读取 pod manifest 与镜像 manifest并把每个网络接口格式化为网络名:ip4地址的形式。第五步签名——让镜像可以被安全分发rkt 默认要求 ACI 带 gpg 分离签名。下面完整演示从生成密钥到签发、校验的流程。生成 gpg 签名密钥创建名为gpg-batch的批处理文件内容如下%echo Generating a default key Key-Type: RSA Key-Length: 2048 Subkey-Type: RSA Subkey-Length: 2048 Name-Real: Carly Container Name-Comment: ACI signing key Name-Email: carlyexample.com Expire-Date: 0 Passphrase: rkt %pubring rkt.pub %secring rkt.sec %commit %echo done使用批处理模式生成密钥不指定参数则进入交互模式$ gpg --batch --gen-key gpg-batch列出密钥并建立信任$ gpg --no-default-keyring \ --secret-keyring ./rkt.sec --keyring ./rkt.pub --list-keys ./rkt.pub ------------ pub 2048R/26EF7A14 2015-01-09 uid [ unknown] Carly Container (ACI signing key) carlyexample.com sub 2048R/B9C074CD 2015-01-09此时该密钥的信任等级为unknown直接校验签名会出现gpg: WARNING: This key is not certified with a trusted signature!的警告。因为我们确切知道密钥来源可以把它设为最终信任$ gpg --no-default-keyring \ --secret-keyring ./rkt.sec \ --keyring ./rkt.pub \ --edit-key 26EF7A14 \ trust在Your decision?处输入5trust ultimately并确认y随后quit退出。导出公钥$ gpg --no-default-keyring --armor \ --secret-keyring ./rkt.sec --keyring ./rkt.pub \ --export carlyexample.com pubkeys.gpg签名 ACI对镜像生成分离的 ASCII 装甲签名$ gpg --no-default-keyring --armor \ --secret-keyring ./rkt.sec --keyring ./rkt.pub \ --output hello-0.0.1-linux-amd64.aci.asc \ --detach-sig hello-0.0.1-linux-amd64.aci用 gpg 本地验证$ gpg --no-default-keyring \ --secret-keyring ./rkt.sec --keyring ./rkt.pub \ --verify hello-0.0.1-linux-amd64.aci.asc hello-0.0.1-linux-amd64.aci gpg: Signature made Fri Jan 9 05:01:49 2015 PST using RSA key ID 26EF7A14 gpg: Good signature from Carly Container (ACI signing key) carlyexample.com [ultimate]到此你应当拥有三个文件它们是后续分发与信任演示的基础hello-0.0.1-linux-amd64.aci.asc hello-0.0.1-linux-amd64.aci pubkeys.gpg第六步通过 Meta Discovery 分发镜像发布 HTML 与元标签在example.com/hello页面放置以下 HTML 与 meta 标签!DOCTYPE html html langen head meta charsetutf-8 meta nameac-discovery contentexample.com/hello https://example.com/images/{name}-{version}-{os}-{arch}.{ext} meta nameac-discovery-pubkeys contentexample.com/hello https://example.com/pubkeys.gpg /head /html并按模板 URL 提供下列文件https://example.com/images/example.com/hello-0.0.1-linux-amd64.aci.asc https://example.com/images/example.com/hello-0.0.1-linux-amd64.aci https://example.com/pubkeys.gpgrkt 的发现流程执行rkt run example.com/hello:0.0.1时rkt 会依次请求以下 URIhttps://example.com/hello?ac-discovery1 https://example.com/images/example.com/hello-0.0.1-linux-amd64.aci https://example.com/images/example.com/hello-0.0.1-linux-amd64.aci.asc第一次响应里的ac-discovery模板被用于计算 ACI 与签名文件的实际下载地址。其中{os}与{arch}由当前运行系统的值填充{version}取命令行给定的 tag未指定时为latest{ext}按需替换为.aci镜像或.aci.asc分离签名。ACI 下载完成后rkt 会从镜像元数据中提取镜像名称据此在 keystore 中定位受信任的公钥并执行签名校验该发现逻辑在 rkt/image/fetcher.go 中实现默认会补全arch/os标签后先查本地 store未命中再走远程发现。第七步建立信任——rkt trust 与 keystore默认情况下 rkt 不信任任何签名密钥。信任通过把公钥放进 rkt keystore 来建立可借助rkt trust或手动完成。默认 keystore 布局为/etc/rkt/trustedkeys/root.d /etc/rkt/trustedkeys/prefix.d /usr/lib/rkt/trustedkeys/root.d /usr/lib/rkt/trustedkeys/prefix.d系统管理员应把受信任密钥存放在/etc/rkt下/usr/lib/rkt预留给操作系统发行版使用。受信任密钥按公钥指纹作为文件名存放。若想禁用某个发行版自带的密钥只需在/etc/rkt下写入同名空文件例如/usr/lib/rkt/trustedkeys/prefix.d/coreos.com/a175e31de7e3c5b9d2c4603e4dfb22bf75ef7a23对应空文件/etc/rkt/trustedkeys/prefix.d/coreos.com/a175e31de7e3c5b9d2c4603e4dfb22bf75ef7a23方式一使用 rkt trust推荐对前缀example.com/hello信任从指定 URI 获得的公钥$ rkt trust --prefixexample.com/hello https://example.com/pubkeys.gpg Prefix: example.com/hello Key: https://example.com/aci-pubkeys.gpg GPG key fingerprint is: B346 E31D E7E3 C6F9 D1D4 603F 4DFB 61BF 26EF 7A14 Carly Container (ACI signing key) carlyexample.com Are you sure you want to trust this key (yes/no)? yes Trusting https://example.com/aci-pubkeys.gpg for prefix example.com/hello. Added key for prefix example.com/hello at /etc/rkt/trustedkeys/prefix.d/example.com/hello/b346e31de7e3c6f9d1d4603f4dfb61bf26ef7a14此后指纹为b346e31de7e3c6f9d1d4603f4dfb61bf26ef7a14的公钥将对所有名称前缀为example.com/hello的镜像生效。rkt trust还支持只给前缀不给公钥走 Meta Discovery 自动寻找以及用--root信任根域密钥等能力详见 trust 子命令文档其实现位于 rkt/trust.go会校验--prefix与--root互斥、拒绝带 URL scheme 的前缀并通过--skip-fingerprint-review控制是否需要人工确认指纹。方式二手动添加密钥首先下载公钥并获取其指纹$ curl -O https://example.com/pubkeys.gpg$ gpg --no-default-keyring --with-fingerprint --keyring ./pubkeys.gpg carlyexample.com pub 2048R/26EF7A14 2015-01-09 Key fingerprint B346 E31D E7E3 C6F9 D1D4 603F 4DFB 61BF 26EF 7A14 uid [ unknown] Carly Container (ACI signing key) carlyexample.com sub 2048R/B9C074CD 2015-01-09去掉空格并转为小写得到文件名$ echo B346 E31D E7E3 C6F9 D1D4 603F 4DFB 61BF 26EF 7A14 | \ tr -d [:space:] | tr [:upper:] [:lower:]b346e31de7e3c6f9d1d4603f4dfb61bf26ef7a14按指纹命名存放公钥即可对前缀建立信任mkdir -p /etc/rkt/trustedkeys/prefix.d/example.com/hello mv pubkeys.gpg /etc/rkt/trustedkeys/prefix.d/example.com/hello/b346e31de7e3c6f9d1d4603f4dfb61bf26ef7a14全局信任若想信任某个公钥用于任意镜像把它放进root.d目录即可/etc/rkt/trustedkeys/root.d /usr/lib/rkt/trustedkeys/root.d第八步下载、验证并运行已签名 ACI通过 run 一步完成默认情况下 rkt 会自动下载 ACI 的分离签名并校验镜像# rkt run example.com/hello:0.0.1 rkt: starting to discover app img example.com/hello:0.0.1 rkt: starting to fetch img from http://example.com/images/example.com/hello-0.0.1-linux-amd64.aci Downloading aci: [ ] 7.24 KB/1.26 MB rkt: example.com/hello:0.0.1 verified signed by: Carly Container (ACI signing key) carlyexample.com /etc/localtime is not a symlink, not updating container timezone. ^]^]Container stage1 terminated by signal KILL.输出中的verified signed by表明签名校验成功。若改用--insecure-optionsimage关闭校验rkt 会给出醒目警告# rkt --insecure-optionsimage run example.com/hello:0.0.1 rkt: starting to discover app img example.com/hello:0.0.1 rkt: starting to fetch img from http://example.com/images/example.com/hello-0.0.1-linux-amd64.aci rkt: warning: image signature verification has been disabled Downloading aci: [ ] 32.8 KB/1.26 MB /etc/localtime is not a symlink, not updating container timezone. ^]^]Container stage1 terminated by signal KILL.用 fetch 单独下载验证rkt fetch可以在不启动 pod 的前提下完成下载与校验适合在大量主机上预缓存镜像# rkt fetch example.com/hello:0.0.1 rkt: starting to discover app img example.com/hello:0.0.1 rkt: starting to fetch img from http://example.com/images/example.com/hello-0.0.1-linux-amd64.aci Downloading aci: [ ] 14.5 KB/1.26 MB rkt: example.com/hello:0.0.1 verified signed by: Carly Container (ACI signing key) carlyexample.com sha512-b3f138e10482d4b5f334294d69ae5c40同样可用--insecure-optionsimage关闭校验详见 fetch 子命令文档。最后一行sha512-...是镜像在本地 store 中的 ID之后可直接用这个 hash 来rkt run sha512-b3f138e10482d4b5f334294d69ae5c40。第九步进阶——rkt run 的镜像寻址与运行时覆盖四种镜像寻址方式镜像可以按名称、hash、显式传输地址或 Docker Registry URL 来运行缺失时 rkt 会自动抓取行为受 镜像抓取策略 控制# rkt run coreos.com/etcd:v2.0.0 # rkt run sha512-fa1cb92dc276b0f9bedf87981e61ecde # rkt run https://github.com/coreos/etcd/releases/download/v2.0.0/etcd-v2.0.0-linux-amd64.aci # rkt --insecure-optionsimage run docker://quay.io/coreos/etcd:v2.0.0注意 Docker 镜像不支持签名验证因此使用docker://时通常必须带--insecure-optionsimage参见 运行 Docker 镜像文档rkt 会通过 docker2aci 把分层镜像转换为 ACI。同 pod 多应用与参数传递# rkt run example.com/app1 example.com/app2向不同应用传参用image1 -- [args] --- image2 -- [args]模式# rkt run example.com/worker -- --loglevel verbose --- example.com/syncer -- --interval 30s结合--exec覆盖启动程序# rkt run example.com/worker --exec /bin/ov -- --loglevel verbose --- example.com/syncer --exec /bin/syncer2 -- --interval 30s常见运行时覆盖--name覆盖应用名同名镜像可在同一 pod 中运行多份如docker://busybox --namebusybox1--exec覆盖镜像 manifest 中的exec字段--cpu750m --memory128M以 Kubernetes 资源模型为单位覆盖 CPU/内存隔离器--user1000 --group100覆盖运行身份--inherit-env/--set-env/--set-env-file/--environment控制环境变量优先级从父进程环境、镜像环境、文件、命令行到逐应用指定依次递增--volume NAME,kindhost,source...,readOnly...与--mount volumeNAME,targetPATH挂载卷host卷与empty卷到挂载点未匹配挂载点的卷会被静默忽略而 manifest 声明的挂载点若无对应卷则自动创建隐式empty卷--nethost共享宿主网络栈不指定时默认--netdefault加载默认 contained 网络--no-overlaytrue显式关闭 overlayfs默认启用底层文件系统不支持时会自动降级--private-users在用户命名空间内运行。完整的参数表含--dns*、--hostname、--hosts-entry、--pod-manifest、--port、--seccomp、--stage1-*等请参阅 run 子命令文档。源码视角run 命令背后的关键路径参数解析与校验集中在 rkt/run.gorunRun先解析 app 参数检查--port与--net、--mds-register与--net的冲突随后依次打开 imagestore、treestore解析配置、解析 stage1 镜像 hash再通过image.Finder按--pull-policy抓取镜像最终构造stage0.RunConfig交给stage0.Run该调用是 exec 语义不会返回。镜像抓取逻辑见 rkt/image/fetcher.goFetchImage按镜像参数类型分发——本地 ACI 归档走file/http(s)Docker 走dockerFetcher名称类走 Meta DiscoverynameFetcher并可通过--pull-policy的never/new/update控制是否联网默认run/prepare为newfetch为update见 镜像抓取行为文档。若要从私有仓库抓取镜像可在/etc/rkt/auth.d下按 configuration.md 的auth/dockerAuthkind 配置 basic、OAuth、AWS v4 或 Docker Registry 凭据系统目录/usr/lib/rkt、本地目录/etc/rkt与用户目录--user-config支持逐字段覆盖。结语完整发布链路回顾至此你已经走通了从源码到可安全分发的完整链路静态编译 Go 应用 →acbuild打包 ACI → 本地rkt runcurl验证 → gpg 签名 → 在域名下配置ac-discoverymeta 标签 →rkt trust建立信任 →rkt run example.com/hello:0.0.1由 Meta Discovery 自动定位、下载并验证镜像后运行。这一流程正是 rkt 作为 App Container 规范参考实现的核心使用范式也体现了它可组合、安全、基于标准的设计理念。赞分享容器运行时云原生网络【免费下载链接】rkt[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.项目地址https://gitcode.com/gh_mirrors/rk/rkt点击查看免费下载相关推荐Wasp 快速上手指南三步创建并运行你的第一个全栈应用Wasp 快速上手指南三步创建并运行你的第一个全栈应用 导读 本文是 Wasp 框架的官方快速入门文档 web/docs/introduction/quicWeb框架后端前端CLI开发工具GDSDecompGodot逆向工程的技术重构与版本兼容性突破GDSDecompGodot逆向工程的技术重构与版本兼容性突破 当游戏开发者面对一个已经发布的Godot项目却发现原始源码丢失只剩下打包后的PCK文件时容器运行时云原生网络container 快速上手教程在 Mac 上构建、运行并发布一个 Web 服务器容器镜像container 快速上手教程在 Mac 上构建、运行并发布一个 Web 服务器容器镜像 本文基于 container https://link.gitcoCLI虚拟化容器运行时云原生上一篇ncmdump2 个动作把 NCM 变成 MP3免费、离线下一篇一条命令解开PKGRePKG的TEX转PNG纹理提取创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Wallpaper Engine锁屏动态壁纸设置教程:静态帧与幻灯片方案 1. 为什么动态壁纸的锁屏适配是个麻烦事很多人第一次用 Wallpaper Engine 的时候,都会经历一个短暂的兴奋期:创意工坊里那些会动的、会响的、会跟着鼠标跑的壁纸实在太香了,桌面瞬间从“办公工具”变成了“个人展厅”。但兴奋劲过去之后&… · 2026/9/25 16:09:32
VirtualBox装Ubuntu实战指南:USB直通、网络配置与开发环境搭建 1. 为什么现在还要用 VirtualBox 装 Ubuntu?——一个被低估的“开发沙盒”价值重估 很多人看到这个标题第一反应是:“都2024年了,还用 VirtualBox?不是早该换 WSL2 或 VMware Workstation 了吗?”——这话我三年前也信… · 2026/9/25 16:09:32
【风电光伏功率预测】功率曲线没问题,预测却像“抽风”?别急着换模型:99% 是气象输入在漂移 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 16:09:32
基于SpringBoot和Vue前后端分离购票系统的设计与实现 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与意义
随着互联网技术的快速发展,传统线下购票方式存在排队时间长、信息不透明、票务管理效率低等问题。尤其在演出、电影、交通出行等场景中&… · 2026/9/25 16:33:04
DeskcommCRM落地全记录:从私有化部署到销售漏斗搭建实践 做过企业销售管理或者自己带过业务团队的朋友,大概率都经历过这么一段混乱期:客户名单塞在几个销售的个人Excel里,重要客户的沟通记录散落在微信聊天和邮件箱,管理层想看一眼本月真正的销售漏斗,得等销售晚上填表格&am… · 2026/9/25 16:32:58
CRM选型到落地:DeskcommCRM配置实战与团队使用指南 做CRM选型那阵子,我带着销售和客服两条线前后试了五六套系统,最后真正留下、团队每天都打开的就是 DeskcommCRM。先说清楚它是什么:一款把客户资料、电话、邮件和在线会话放到同一个桌面工作台里的轻量级CRM,重点解决“客户信息散… · 2026/9/25 16:32:58
基于Java的小微企业库存管理系统设计与实现 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与意义
小微企业是国民经济的重要组成部分,但在日常经营中普遍面临库存管理粗放、账实不符、采购与销售脱节等问题。传统的人工台账方式不仅效率… · 2026/9/25 16:32:58
vercel-optimize - next-heavy-ui-lazy-load-boundaries id: next-heavy-ui-lazy-load-boundaries
title: Next.js heavy UI lazy-load boundaries
status: active
candidateKinds: [“cwv_poor”]
frameworks: [“next*”]
metrics: [“LCP”, “INP”]
priority: 82
citations: [“https://nextjs.org/docs/app/guides/lazy-loading… · 2026/9/25 16:32:52
vercel-optimize - cold-start-initialization-bundle id: cold-start-initialization-bundle
title: Cold-start initialization and bundle weight
status: active
candidateKinds: [“cold_start”]
frameworks: [“*”]
priority: 92
citations: [“https://vercel.com/docs/functions/debug-slow-functions”, “https://verce… · 2026/9/25 16:32:40
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37