只需四步!发布 KCL 程序包发布到 docker.io
kpm 是一个用于管理 kcl 程序包的工具,在 kpm 的帮助下,我们可以很轻松的管理 KCL 的三方库。从 kpm 0.2.0 版本开始,kpm 支持使用 OCI Registry 作为中央仓库保存 KCL 的程序包,本文将以 docker.io 作为 kpm 的中央仓库,仅需四步,您就可以轻松的将您的 KCL 程序包发布到 docker.io 中。
步骤 1:安装 kpm
首先,您需要在您的计算机上安装 kpm,我们推荐您使用 go install 安装。
go install kcl-lang.io/kpm@latest
您也可以手动安装, 其他的安装方式您可以参考:https://kcl-lang.io/docs/user_docs/guides/package-management/installation
步骤 2:创建一个 docker.io 账户
您需要创建一个 docker.io 账户以支持您的 kcl 包的推送。下文中,我们将用账户名为 test,账户密码为 1234 的账户为例。
步骤 3:登录 docker.io
您可以直接使用 docker.io 的账户名和密码登录。其中 <USERNAME> 是您的 docker.io 用户名,<PASSWORD> 是您 docker.io 账户的密码。
kpm login -u <USERNAME> -p <PASSWORD> docker.io
对于我们的示例账户,我们就可以用下面的命令登录。
kpm login -u test -p 1234 docker.io
关于如何使用 kpm login 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/login。
步骤 4:推送您的 kcl 包
现在,您可以使用 kpm 将您的 kcl 包推送到 docker.io。
1. 准备工作:一个合法的 kcl 包
首先,您需要确保您推送的内容是符合一个 kcl 包的规范,即必须包含合法的 kcl.mod 和 kcl.mod.lock 文件。
如果您不知道如何得到一个合法的 kcl.mod 和 kcl.mod.lock 。您可以使用 kpm init 命令创建。
以 聊聊 K8S 中的 SideCar 设计模式·第 2 篇 中提到的 Nginx 容器配置为例, 我们可以新建一个 KCL 程序包 my_nginx,并使用 kpm 为其添加需要的 k8s 依赖。
# 新建一个名为 my_nginx 的 KCL 程序包
kpm init my_nginx
# 进入 my_nginx 中
cd my_nginx
# 添加 k8s 依赖
kpm add k8s
在 my_nginx / main.k 文件中,编写我们需要的 nginx 容器配置。
import k8s.api.core.v1 as k8core
k8core.Pod {
metadata.name = "web-app"
spec.containers = [{
name = "main-container"
image = "nginx"
ports = [{containerPort: 80}]
}]
}
在得到了一个合法的 kcl 程序包后,接下来就可以使用 kpm 将这个包发布在 docker.io 中了。
关于如何使用 kpm init 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/init
关于如何使用 kpm add 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/add
2. 推送 kcl 包
您可以在 kcl 包的根目录下使用以下命令进行操作:
kpm push oci://docker.io/<USERNAME>/<PACKAGE_NAME>
其中, <USERNAME> 是您的 docker.io 用户名, <PACKAGE_NAME>是 KCL 程序包的名称。以上面创建的 my_nginx 为例:
# 在 my_nginx 包的根目录下
$ pwd
/home/user/my_nginx
# 推送 kcl 包到 docker.io
$ kpm push oci://docker.io/test/my_nginx
完成上述步骤后,您就成功地将您的 kcl 包 my_nginx 推送到了 docker.io .
关于如何使用 kpm push 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/push
3. 看看效果
通过 kpm run, 我们可以直接编译我们发布到 docker.io 上的 my_nginx 。
kpm run oci://docker.io/test/my_nginx
成功得到如下编译结果,编译成功 !
apiVersion: v1
kind: Pod
metadata:
name: web-app
spec:
containers:
- image: nginx
name: main-container
ports:
- containerPort: 80
关于如何使用 kpm run 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/run
4. 总结
这篇文章向大家演示了如何使用 kpm 将 KCL 的程序包发布到 docker.io。在后续的文章中,我们将会向大家分享一些在开发 kpm 过程中的一些设计参考和思路,来帮助大家使用 kpm 管理 KCL 的程序包。
往期回顾
KCL v0.5.0 重磅发布 - 面向云原生场景更易用的语言、工具链,社区集成和扩展支持
使用 Github、Argo CD 和 KCL 实现 GitOps 以简化 DevOps
https://github.com/kcl-lang/kpm
https://github.com/kcl-lang/kcl
https://kcl-lang.io
https://github.com/KusionStack/kusion
https://kusionstack.io/