ko
是一个为 Go 应用程序设计的简单、快速的容器镜像构建器。它非常适合以下用例:镜像中只包含一个 Go 应用程序,并且对操作系统基础镜像的依赖很少或没有(例如,没有 cgo,没有操作系统软件包依赖)。
介绍
Google 已申请将 ko
加入云原生计算基金会(Cloud Native Computing Foundation)
,成为一个沙箱项目!
ko
通过在本地机器上有效执行 go build
来构建镜像,因此无需安装 docker
。这使其非常适合轻量级的 CI/CD 用例。
ko 在实现上很大程度上借鉴了为 Bazel 构建 Docker 和 Kubernetes 支持的经验。
ko
可轻松实现多平台构建,默认生成 SBOM,并支持简单的 YAML 模板,使其成为 Kubernetes 应用程序的强大工具。
安装 ko
使用 github Releases 安装
$ VERSION=TODO # 选择最新版本(不带 v 前缀)
$ OS=Linux # 或 Darwin
$ ARCH=x86_64 # 或 arm64, i386, s390x
使用 OpenSSF 的 slsa-framework/slsa-github-generator 生成 SLSA3 证明。要验证 ko 的版本,请从 slsa-framework/slsa-verifier#installation 安装验证工具并按如下方式验证:
$ curl -sSfL "https://github.com/ko-build/ko/releases/download/v${VERSION}/ko_${VERSION}_${OS}_${ARCH}.tar.gz" > ko.tar.gz
$ curl -sSfL https://github.com/ko-build/ko/releases/download/v${VERSION}/multiple.intoto.jsonl > multiple.intoto.jsonl
$ slsa-verifier verify-artifact --provenance-path multiple.intoto.jsonl --source-uri github.com/ko-build/ko --source-tag "v${VERSION}" ko.tar.gz
Verified signature against tlog entry index 24413745 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77ab97a5263b5fa8f35789618348a39358b1f9470b0c31045effbbe5e23e77a5836
Verified build using builder "https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.7.0" at commit 200db7243f02b5c0303e21d8ab8e3b4ad3a229d0
Verifying artifact /Users/batuhanapaydin/workspace/ko/ko.tar.gz: PASSED
PASSED: Verified SLSA provenance
$ tar xzf ko.tar.gz ko
$ chmod +x ./ko`
Mac 安装
brew install ko
MacPorts 安装
使用 MacPorts 安装
sudo port install ko
更多信息请参考此处
Windows 安装
在 Windows 上使用 Scoop 安装
scoop install ko
Alpine 安装
在 Alpine Linux 上安装,在 Alpine 上安装需要使用 testing 仓库。
echo https://dl-cdn.alpinelinux.org/alpine/edge/testing/ >> /etc/apk/repositories
apk update
apk add ko
从源代码构建并安装
使用 Go 1.16+,构建并安装最新发布版本:
go install github.com/google/ko@latest
在 GitHub Actions 上设置
您可以使用 setup-ko 操作在 GitHub Actions 工作流中安装 ko 并设置对 GitHub Container Registry 的身份验证:
steps:
- uses: ko-build/setup-ko@v0.6
使用 ko
身份验证
ko
的身份验证依赖于你的 Docker 配置(通常是 ~/.docker/config.json
)中设置的凭据。
如果你能用 docker push
推送镜像,那么你对 ko
来说已经完成身份验证了! ✨
由于 ko
不需要 docker
,ko login
也提供了一个类似于 docker login
的界面,用于使用用户名和密码登录到容器镜像仓库。
此外,即使 Docker 配置中没有设置身份验证,ko
也内置支持使用环境变量中配置的凭据对以下容器仓库进行身份验证:
- Google Container Registry 和 Artifact Registry,使用 Application Default Credentials 或在
gcloud
中配置的凭据。
- Amazon Elastic Container Registry,使用 AWS 凭据。
- Azure Container Registry,使用环境变量。
- GitHub Container Registry,使用
GITHUB_TOKEN
环境变量。
选择目标
ko
依赖于一个环境变量 KO_DOCKER_REPO
来识别它应该将构建的镜像推送到哪里。通常,这是一个远程仓库,例如:
KO_DOCKER_REPO=gcr.io/my-project
KO_DOCKER_REPO=ghcr.io/my-org/my-repo
KO_DOCKER_REPO=my-dockerhub-user
构建镜像
ko build ./cmd/app
会构建并推送一个容器镜像,并将生成的镜像摘要(digest)打印到标准输出。
在这个例子中,./cmd/app
必须是一个定义了 func main()
的 package main
。
$ ko build ./cmd/app ... registry.example.com/my-project/app-099ba5bcefdead87f92606265fb99ac0@sha256:6e398316742b7aa4a93161dce4a23bc5c545700b862b43347b941000b112ec3e
注意:在 v0.10 版本之前,该命令叫做 ko publish
,它等同于 ko build
,这两个命令都可以工作并执行相同的事情。
从 ./cmd/app
构建的可执行二进制文件位于镜像的 /ko-app/app
中——二进制文件的名称与基础导入路径名称匹配——并且该二进制文件就是镜像的入口点。
其他