如何使用 Bazel rules_docker container_flatten 创建 Docker 图像?
How to use Bazel rules_docker container_flatten to create a Docker image?
我想使用 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
in 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 风格的文档字符串生成的),文档肯定可以使用一些改进。
我想使用 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
in 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 风格的文档字符串生成的),文档肯定可以使用一些改进。