kpm 是一个用于管理 kcl 程序包的工具,在 kpm 的帮助下,我们可以很轻松的管理 KCL 的三方库。从 kpm 0.2.0 版本开始,kpm 支持使用 OCI Registry 作为中央仓库保存 KCL 的程序包,本文将以 docker.io 作为 kpm 的中央仓库,仅需四步,您就可以轻松的将您的 KCL 程序包发布到 docker.io 中。
首先,您需要在您的计算机上安装 kpm ,我们推荐您使用 go install 安装。
go install kcl-lang.io/kpm@latest
您也可以手动安装, 其他的安装方式您可以参考:https://kcl-lang.io/docs/user_docs/guides/package-management/installation
您需要创建一个 docker.io 账户以支持您的 kcl 包的推送。下文中,我们将用账户名为 test ,账户密码为 1234 的账户为例。
您可以直接使用 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 。
现在,您可以使用 kpm 将您的 kcl 包推送到 docker.io 。
首先,您需要确保您推送的内容是符合一个 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
您可以在 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
通过 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
这篇文章向大家演示了如何使用 kpm 将 KCL 的程序包发布到 docker.io 。在后续的文章中,我们将会向大家分享一些在开发 kpm 过程中的一些设计参考和思路,来帮助大家使用 kpm 管理 KCL 的程序包。