在 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM