Protocol Buffers + Docker
January 18, 2022 ยท View on GitHub
A lightweight protoc Docker image, published as otel/build-protobuf to Docker Hub, with all dependencies built-in, to generate code in multiple languages.
Forked from https://github.com/jaegertracing/docker-protobuf.
What's included in the image
- https://github.com/ckaznocha/protoc-gen-lint
- https://github.com/gogo/protobuf
- https://github.com/golang/protobuf
- https://github.com/google/protobuf
- https://github.com/grpc-ecosystem/grpc-gateway
- https://github.com/grpc/grpc
- https://github.com/grpc/grpc-java
- https://github.com/atoulme/protoc-gen-parquet
Supported languages
- C#
- C++
- Go
- Java / JavaNano (Android)
- Kotlin
- JavaScript
- Objective-C
- Parquet
- PHP
- Python
- Ruby
Usage
docker run --rm -v<some-path>:<some-path> -w<some-path> otel/build-protobuf [OPTION] PROTO_FILES
For help try:
docker run --rm otel/build-protobuf --help
To generate language specific code
-
Make sure you have the
model.protofile present in${PWD} -
Use any of the language specific options:
--cpp_out=OUT_DIR Generate C++ header and source.
--csharp_out=OUT_DIR Generate C# source file.
--java_out=OUT_DIR Generate Java source file.
--js_out=OUT_DIR Generate JavaScript source.
--kotlin_out=OUT_DIR Generate Kotlin source file.
--objc_out=OUT_DIR Generate Objective C header and source.
--parquet_out=OUT_DIR Generate Parquet schema.
--php_out=OUT_DIR Generate PHP source file.
--python_out=OUT_DIR Generate Python source file.
--ruby_out=OUT_DIR Generate Ruby source file.
Example for Java:
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} otel/build-protobuf:latest --proto_path=${PWD} \
--java_out=${PWD} -I/usr/include/github.com/gogo/protobuf ${PWD}/model.proto
CLI options:
--proto_path: The path where protoc should search for proto files--java_out: Generate Java code in the provided path
Generate dependencies
The generated code might require dependencies on packages like GoGo or Swagger. The code for these modules can be also generated by using this docker image:
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} otel/build-protobuf:latest --proto_path=${PWD} \
--java_out=${PWD} /usr/include/github.com/gogo/protobuf/gogoproto/gogo.proto
Use this command to find the path to proto files included in the image:
docker run --rm -it --entrypoint=/bin/sh otel/build-protobuf:latest -c "find /usr/include -name *.proto"