微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Bazel rules_docker container_flatten 创建 Docker 镜像?

如何解决如何使用 Bazel rules_docker container_flatten 创建 Docker 镜像?

我想使用 Bazel 精简 debian 10 Docker 映像,然后将结果展平为单层映像。

这是我的代码

load("@io_bazel_rules_docker//container:container.bzl","container_image","container_flatten","container_bundle","container_import")
load("@io_bazel_rules_docker//docker/util:run.bzl","container_run_and_commit")


container_run_and_commit(
  name = "debian10_slimmed_layers",commands = ["rm -rf /usr/share/man/*"],image = "@debian10//image",)

# Create an image just so we can flatten it.
container_image(
  name = "debian10_slimmed_image",base = ":debian10_slimmed_layers",)

# Flatten the layers to a single layer.
container_flatten(
    name = "debian10_flatten",image = ":debian10_slimmed_image",)

我遇到的问题是我不知道如何使用 debian10_flatten输出生成可运行的 Docker 映像。

我试过了:

container_image(
  name = "debian10",base = ":debian10_flatten",)

失败:

2021/06/27 13:16:25 Unable to load docker image from bazel-out/k8-fastbuild/bin/debian10_flatten.tar:
file manifest.json not found in tar

解决方法

container_flatten 为您提供文件系统 tarball。您需要将 tarball 添加为 tars 中的 debian10,而不是 deps

container_image(
  name = "debian10",tars = [":debian10_flatten.tar"],)

deps 用于另一个 container_image 规则(或等效规则)。如果您有一个 docker save 样式的 tarball,container_load 将是获得 container_image 等效项的方法。

我通过查看 container/flatten.bzl 中的实现发现了这一点。如果有人想打开 PR,这些文档肯定可以使用一些改进(它们是从那个 .bzl 文件中的 python 风格的文档字符串生成的)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。