grpc docker - yaokun123/php-wiki GitHub Wiki

Docker 化微服务

一、创建微服务部署的 Dockerfile

alpine 是一个超轻量级 Linux 发行版本,专为 Docker 中 Web 应用而生。它能保证绝大多数 web 应用可以正常运行,即使它只包含必要的 run-time 文件和依赖,镜像大小只有 4 MB,相比上边 Ubuntu16.4 节约了 99.7% 的空间

# 若运行环境是 Linux 则需把 alpine 换成 debian
# 使用最新版 alpine 作为基础镜像
FROM alpine:latest
# FROM debian:latest


# 在容器的根目录下创建 app 目录
RUN mkdir /app


# 将工作目录切换到 /app 下
WORKDIR /app


# 将微服务的服务端运行文件拷贝到 /app 下
ADD my-service /app/my-service

EXPOSE 50051


# 运行服务端
CMD ["./my-service"]

由于 docker 镜像的超轻量级,在上边部署和运行微服务耗费的资源是很小的。

二、编译项目

为了在 alpine 上运行我们的微服务,向 Makefile 追加命令:

build:
# 一定要注意 Makefile 中的缩进,否则 make build 可能报错 Nothing to be done for build
# protoc 命令前边是一个 Tab,不是四个或八个空格
# 执行 make build,会在 proto/consignment 目录下生成 consignment.pb.go 和 consignment_grpc.pb.go两个文件
# 新版本的写法
	protoc --go_out=$(GOPATH)/src/shippy/docker-server/proto/consignment proto/consignment/consignment.proto
	protoc --go-grpc_out=$(GOPATH)/src/shippy/docker-server/proto/consignment proto/consignment/consignment.proto
# 这个是老版本的写法了
#	protoc -I. --go_out=plugins=grpc:$(GOPATH)/src/shippy/consignment-service proto/consignment/consignment.proto

# 为了在 alpine 上运行我们的微服务,向 Makefile 追加命令
# 告知 Go 编译器生成二进制文件的目标环境:amd64 CPU 的 Linux 系统
# 需手动指定 GOOS 和 GOARCH 的值,否则在 macOS 上编译出的文件是无法在 alpine 容器中运行的
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o my-service
# 根据当前目录下的 Dockerfile 生成名为 consignment-service 的镜像
	docker build -t test-grpc-service .

run:
# 在 Docker alpine 容器的 50001 端口上运行 consignment-service 服务
# 可添加 -d 参数将微服务放到后台运行
	docker run -p 50051:50051 -d test-grpc-service

# 现在运行 make build && make run 即可在 docker 中运行我们的微服务,
# 此时在本机执行微服务的客户端代码,将成功调用 docker 中的微服务:

三、运行 Docker 化后的微服务

make build && make run 即可在 docker 中运行我们的微服务,此时在本机执行微服务的客户端代码,将成功调用 docker 中的微服务