首页 > 其他分享 >Dockerfile - build zgrpc-go-professionals:server

Dockerfile - build zgrpc-go-professionals:server

时间:2024-05-13 10:08:30浏览次数:14  
标签:professionals PROTOC zgrpc -- server task protoc go

 

FROM --platform=$BUILDPLATFORM alpine as protoc
ARG BUILDPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64

# download the protoc binary from github
# We unzip the file into /usr/local. Notice that we are extracting both the protoc
# binary (/bin/protoc) and the /include folder because the first one is the compiler that we are
# going to use and the second one is all the files needed to include Well-Known Types.
RUN export PROTOC_VERSION=26.1 \
    && export PROTOC_ARCH=$(uname -m | sed s/aarch64/aarch_64/) \
    && export PROTOC_OS=$(echo $TARGETOS | sed s/darwin/linux/) \
    && export PROTOC_ZIP=protoc-$PROTOC_VERSION-$PROTOC_OS-$PROTOC_ARCH.zip \
    && echo "downloading: " https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/$PROTOC_ZIP \
    && wget https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOC_VERSION/$PROTOC_ZIP \
    && unzip -o $PROTOC_ZIP -d /usr/local bin/protoc 'include/*' \
    && rm -f $PROTOC_ZIP

FROM --platform=$BUILDPLATFORM golang:1.22-alpine as build
ARG BUILDPLATFORM=linux/amd64 TARGETOS=linux TARGETARCH=amd64

# copy the protoc binary and the protobuf includes
COPY --from=protoc /usr/local/bin/protoc /usr/local/bin/protoc
COPY --from=protoc /usr/local/include/google /usr/local/include/google

# download protoc plugins
RUN go env -w GOPROXY=https://goproxy.io,direct
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
RUN go install github.com/envoyproxy/protoc-gen-validate@latest

# copy proto files into /go/src/proto
WORKDIR /go/src/proto
COPY ./proto .

# generate code out of proto files
WORKDIR /go
ENV MODULE=zgrpc-go-professionals
RUN protoc --proto_path=src/proto \
           --go_out=src \
           --go_opt=module=$MODULE \
           --go-grpc_out=src \
           --go-grpc_opt=module=$MODULE \
           --validate_out="lang=go,module=$MODULE:src" \
           src/proto/todo/v2/*.proto

# copy code into /go/src/server
WORKDIR /go/src/server
COPY ./server .

# copy go.mod into go/src
WORKDIR /go/src
COPY go.mod .

# download dependencies and build
RUN go mod tidy
WORKDIR /go/src/server
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="-s -w" -o /go/bin/server

FROM scratch

# copy certs into /certs
COPY ./certs/server_cert.pem ./certs/server_cert.pem
COPY ./certs/server_key.pem ./certs/server_key.pem

# copy the previously built binary into smaller image
COPY --from=build /go/bin/server /
EXPOSE 50051 5002
CMD ["/server", "0.0.0.0:50051", "0.0.0.0:50052"]

 

zzh@ZZHPC:/zdata/Github/zgrpc-go-professionals$ docker build -t zgrpc-go-professionals:server -f server.dockerfile .

The image is built successfully.

 

It runs well too:

zzh@ZZHPC:~$ docker run --name zgrpc -p 50051:50051 -d zgrpc-go-professionals:server
debfb7acca2628e78b5313b0d0065c866eee3aac0cc3ab93ac8c6051d817e887
zzh@ZZHPC:~$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS         PORTS                                                     NAMES
debfb7acca26   zgrpc-go-professionals:server   "/server 0.0.0.0:500…"   10 seconds ago   Up 9 seconds   5002/tcp, 0.0.0.0:50051->50051/tcp, :::50051->50051/tcp   zgrpc

zzh@ZZHPC:/zdata/Github/zgrpc-go-professionals$ make runc
go run ./client 0.0.0.0:50051
--------ADD--------
added task: 1
added task: 2
added task: 3
-------------------
--------LIST-------
id:1 description:"This is a task" due_date:{seconds:1715565440 nanos:767606314} overdue:  false
id:2 description:"This is another task" due_date:{seconds:1715565440 nanos:767606314} overdue:  false
id:3 description:"And yet another task" due_date:{seconds:1715565440 nanos:767606314} overdue:  false
-------------------
-------UPDATE------
updated task with id: 1
updated task with id: 2
updated task with id: 3
id:1 description:"A better name for the task" due_date:{} overdue:  true
id:2 due_date:{seconds:1715583440 nanos:767606314} overdue:  false
id:3 done:true due_date:{} overdue:  false
-------------------
-------DELETE------
2024/05/13 09:57:15 task deleted
2024/05/13 09:57:15 task deleted
2024/05/13 09:57:15 task deleted
-------------------

 

标签:professionals,PROTOC,zgrpc,--,server,task,protoc,go
From: https://www.cnblogs.com/zhangzhihui/p/18188702

相关文章

  • SQLServer统计监控SQL执行计划突变的方法
    使用动态管理视图(DMVs)来检测SQL执行计划的突变,你需要关注那些能够提供查询执行统计和计划信息的视图。以下是一些可以用于此目的的DMVs以及相应的查询示例:sys.dm_exec_query_stats:这个视图提供了关于SQLServer中查询执行的统计信息,包括CPU时间、总工作时间、执行次数等。SEL......
  • SQLServer如何查询近3分钟最消耗CPU的SQL
    在SQLServer中,要查询近3分钟最消耗CPU的SQL语句,可以使用sys.dm_exec_query_stats动态管理视图结合sys.dm_exec_sql_text函数来获取SQL语句的文本。不过,直接查询近3分钟的数据可能需要一些额外的逻辑来筛选时间范围,因为sys.dm_exec_query_stats并不直接提供时间筛选的功能。一种......
  • php centos选择sqlserver的驱动和扩展选择版本的说明
    2023年2月23日13:41:48首先是phpphp扩展驱动数据库的关系官方文档说明:https://learn.microsoft.com/zh-cn/sql/connect/php/step-1-configure-development-environment-for-php-development?view=sql-server-2017https://learn.microsoft.com/zh-cn/sql/connect/php/syste......
  • 抽丝剥茧:详述一次DevServer Proxy配置无效问题的细致排查过程
    事情的起因是这样的,在一个已上线的项目中,其中一个包含登录和获取菜单的接口因响应时间较长,后端让我尝试未经服务转发的另一域名下的新接口,旧接口允许跨域请求,但新接口不允许本地访问(只允许发布测试/生产的域名访问)。问题那么问题来了,本地环境该如何成功访问到新的接口并验证业务......
  • GRPC - grpcurl: interact with gRPC servers
    https://github.com/fullstorydev/grpcurl Install:goinstallgithub.com/fullstorydev/grpcurl/cmd/grpcurl@latest Addcodetoenableserverreflection:import"google.golang.org/grpc/reflection"reflection.Register(s)//sisagrpcserver......
  • Kibana系列---【重新启动kibana后,访问一直显示:Kibana server is not ready yet,查看
    重新启动kibana后,访问一直显示:Kibanaserverisnotreadyyet,查看后台错误日志报master_not_discovered_exception1.问题描述我的kibana之前都是好的,我把es集群重启之后,再重启kibana,发现无法访问了,访问时一直报:Kibanaserverisnotreadyyet,查看服务器后台日志后发现报:m......
  • Windows Server 2025 简体中文版下载 (Inside Preview, updated May 2024) - 下一代 W
    WindowsServer2025简体中文版下载(InsidePreview,updatedMay2024)-下一代Windows11ServerWindowsServer2025正式版发布在即请访问原文链接:WindowsServer2025简体中文版下载(InsidePreview,updatedMay2024)-下一代Windows11Server,查看最新版。原创......
  • 使用nodejs创建返回xml的web server
    //ImportNode.jscoremodulei.ehttpconsthttp=require('http');constfs=require('fs').promises;consthost='localhost';constport=8000;constrssFileName="/news.rss";//Createwebserverconstserve......
  • SQL SERVER 数据库清空语句 忽略外键 触发器 等(转载)
    有时候我们想清空SQLServer中所有表的数据,但是由于有外键约束和触发器,有时候清表语句无法执行,下面的语句可以关掉和开启一个数据库中的所有外键约束和触发器,以便执行清表语句:USEClothesShopEXECUTEsp_MSForEachTable'ALTERTABLE?NOCHECKCONSTRAINTALL'EXECUTEsp_MS......
  • 这些标识代表了WindowsServer2022SERVERDATACENTER 的不同版本和配置选项。让我逐一解
    这些标识代表了WindowsServer2022的不同版本和配置选项。让我逐一解释它们:WindowsServer2022SERVERSTANDARDCORE:这表示WindowsServer2022的标准版核心安装。它是一个精简的安装版本,只包含基本的操作系统组件和服务,没有图形用户界面。通常用于服务器部署,以减少资......