gRPC+golangbazel的决定性容器镜像。
下面的例子将建立一个golang gRPC客户端/服务器,然后将二进制文件嵌入到容器镜像中。
这些镜像无论在哪里构建,都会有一个一致的镜像哈希。
如需参考,请参见。
要运行这个样本,你需要安装bazel
salrashid123/go-grpc-bazel-docker
建立图像
注意,bazel的基本图像指定了图像+哈希值,所以你将从一个已知的状态开始。
- 工作空间
检查图像
检查生成的图像...无论你在哪里生成图像,这些都是一样的
(可选)gRPC客户端/服务器
(为什么不呢......你已经建立了它,给它一个机会。)
docker run -p 50051:50051 bazel/greeter_server:greeter_server_image
指定docker镜像
你可以通过在这里设置repository命令来指定repo前缀。在下面的例子中,它在dockerhub上,作为handle salrashid123
container_image(
在推送到dockerhub上
- 客户端
$ docker push salrashid123/greeter_server:greeter_server_image
在任何其他机器上拉出镜像并检查
$ docker inspect salrashid123/greeter_server@sha256:e3e95e8f07b552ee2f60aaf6308b75ee660e24ff58d3a2b25be26f53476cde87
云构建
你可以使用Cloud Build来创建镜像,方法是使用bazel builder并指定要导出的存储库路径。在下面的例子中,存储库被设置为谷歌容器注册处。
container_image(
然后在构建和推送的同一系统上。
就这样......你现在已经有了确定的构建......现在好了......是时候学习 bazel 了!
TODO:
- 使用 gazelle 来处理依赖关系 bazel run //:gazelle -- upd-repos -from_file=examples/greeter_server/go.mod
使用go + bazel + grpc + docker的确定性构建最初发表于Google Cloud - Communityon Medium,在那里人们通过强调和回应这个故事继续对话。