在 Docker 中生成 ProtoBuffer、gRPC 文件

使用 znly/protoc 这个镜像来在docker中生成 protobuffer 和 grpc 文件。

Python 语言版

基本用法:

docker run --rm  --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc \
  	--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin \
  	--python_out=生成的pb文件路径 --grpc_out=生成的grpc的pb文件路径 \
  	-I路径 pb文件名

假设我们的项目结构长这样:

api/v1/my_server.proto 放置.pb文件
client/ 放置生成的pb文件,如 xx_pb2.py, xx_pb2_grpc.py
Makefile

首先编辑 Makefile:

client/my_server_pb2.py client/my_server_pb2_grpc.py: api/v1/my_server.proto
	@docker run --rm  --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc \
  	--plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin \
  	--python_out=client --grpc_out=client \
  	-Iapi/v1 my_server.pb

compile-proto: client/my_server_pb2.py client/my_server_pb2_grpc.py

注意 @ 是在调用 make 命令时不输出当前指令。

接下来,我们在命令行执行 make compile-proto 就可以了。


Go 语言版

.pb.go 文件

如果说我们想直接生成 .pb.go 文件到proto文件同一个目录下,可以这样写:

api/v1/my_server.pb.go: api/v1/my_server.proto
	@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I. \
        --go_out=plugins=grpc:. api/v1/my_server.proto

pb 文件

如果说我们要生成一个 .pb 文件到 client 目录下:

client/my_server.pb: api/v1/my_server.proto
	@docker run --rm --user `id -u ${USER}` -v `pwd`:`pwd` -w `pwd` znly/protoc -I. \
	--include_imports --include_source_info \
	--descriptor_set_out=client/my_server.pb \
	--go_out=plugins=grpc:. api/v1/my_server.proto

┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆
posted @ 2020-08-04 20:22  水郁  阅读(872)  评论(0编辑  收藏  举报
……