浏览代码

容器化

chenlong 4 年之前
父节点
当前提交
e1087d0636
共有 7 个文件被更改,包括 68 次插入59 次删除
  1. 12 0
      Dockerfile
  2. 5 2
      Makefile
  3. 0 30
      client.go
  4. 二进制
      demo-service
  5. 0 16
      http.go
  6. 43 11
      main.go
  7. 8 0
      supervisord.conf

+ 12 - 0
Dockerfile

@@ -0,0 +1,12 @@
+FROM alpine:latest
+
+# 更新安装源
+RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
+
+RUN apk update && apk add --no-cache bash supervisor
+RUN mkdir /app
+WORKDIR /app
+ADD demo-service /app/demo-service
+ADD supervisord.conf /etc/supervisord.conf
+
+CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

+ 5 - 2
Makefile

@@ -1,3 +1,6 @@
 build:
 build:
-	protoc -I. --go_out=plugins=grpc:. \
-	  proto/demo/demo.proto
+	protoc -I. --go_out=plugins=grpc:. proto/demo/demo.proto
+	GOOS=linux GOARCH=amd64 go build
+	docker build -t laracom-demo-service .
+run:
+	docker run -d -p 9091:9999 -p 8081:8000 laracom-demo-service

+ 0 - 30
client.go

@@ -1,30 +0,0 @@
-package main
-
-import (
-	"golang.org/x/net/context"
-	"google.golang.org/grpc"
-	"log"
-
-	pb "laracom/demo-service/proto/demo"
-)
-
-const (
-	address = "localhost:9999"
-)
-
-func main()  {
-	conn, err := grpc.Dial(address, grpc.WithInsecure())
-	if err != nil {
-		log.Fatalf("连接到 gRPC 服务器失败: %v", err)
-	}
-
-	defer conn.Close()
-
-	client := pb.NewDemoServiceClient(conn)
-	req := &pb.DemoRequest{Name: "学院君"}
-	rsp, err := client.SayHello(context.Background(), req)
-	if err != nil {
-		log.Fatalf("调用 gRPC 服务接口失败: %v", err)
-	}
-	log.Printf("%s", rsp.Text)
-}

二进制
demo-service


+ 0 - 16
http.go

@@ -1,16 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"laracom/demo-service/api"
-)
-
-const (
-	appName = "Demo Service"
-)
-
-func main ()  {
-	fmt.Printf("Starting %v\n", appName)
-	var port = "8000"
-	api.StartWebServer(port)
-}

+ 43 - 11
main.go

@@ -2,15 +2,21 @@ package main
 
 
 import (
 import (
 	"context"
 	"context"
+	"flag"
+	"fmt"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/reflection"
 	"google.golang.org/grpc/reflection"
+	"laracom/demo-service/api"
 	pb "laracom/demo-service/proto/demo"
 	pb "laracom/demo-service/proto/demo"
 	"log"
 	"log"
 	"net"
 	"net"
 )
 )
 
 
 const (
 const (
-	port = ":9999"
+	address = "localhost:9091"
+	grpcPort = ":9999"
+	httpPort = "8000"
+	appName = "Demo Service"
 )
 )
 
 
 type DemoService struct {
 type DemoService struct {
@@ -18,21 +24,47 @@ type DemoService struct {
 }
 }
 
 
 func (ds *DemoService) SayHello(ctx context.Context, req *pb.DemoRequest) (*pb.DemoResponse, error) {
 func (ds *DemoService) SayHello(ctx context.Context, req *pb.DemoRequest) (*pb.DemoResponse, error) {
-	return &pb.DemoResponse{Text: "你好, " + req.Name}, nil
+	rsp := &pb.DemoResponse{Text: "你好, " + req.Name}
+	return rsp, nil
 }
 }
 
 
 func main() {
 func main() {
-	listener, err := net.Listen("tcp", port)
-	if err != nil {
-		log.Fatalf("监听指定端口失败: %v", err)
-	}
+	// 通过-mode参数判断启动哪个模式的代码
+	mode := flag.String("mode", "grpc", "mode:grpc/http/client")
+	flag.Parse()
+	fmt.Println("run mode:", *mode)
+	switch *mode {
+	case "http":
+		fmt.Printf("Starting %v\n", appName)
+		api.StartWebServer(httpPort)
+	case "client":
+		conn, err := grpc.Dial(address, grpc.WithInsecure())
+		if err != nil {
+			log.Fatalf("连接到 gRPC 服务器失败: %v", err)
+		}
+		defer conn.Close()
+		client := pb.NewDemoServiceClient(conn)
+		req := &pb.DemoRequest{Name: "学院君"}
+		rsp, err := client.SayHello(context.Background(), req)
+		if err != nil {
+			log.Fatalf("调用 gRPC 服务接口失败: %v", err)
+		}
+		log.Printf("%s", rsp.Text)
+	case "grpc":
+		fallthrough
+	default:
+		listener, err := net.Listen("tcp", grpcPort)
+		if err != nil {
+			log.Fatalf("监听指定端口失败: %v", err)
+		}
 
 
-	server := grpc.NewServer()
-	pb.RegisterDemoServiceServer(server, &DemoService{})
+		server := grpc.NewServer()
+		pb.RegisterDemoServiceServer(server, &DemoService{})
 
 
-	reflection.Register(server)
+		reflection.Register(server)
 
 
-	if err := server.Serve(listener); err != nil {
-		log.Fatalf("服务启动失败: %v", err)
+		if err := server.Serve(listener); err != nil {
+			log.Fatalf("服务启动失败: %v", err)
+		}
 	}
 	}
 }
 }

+ 8 - 0
supervisord.conf

@@ -0,0 +1,8 @@
+[supervisord]
+nodaemon=true
+
+[program:grpc]
+command=/app/demo-service -mode=grpc
+
+[program:http]
+command=/app/demo-service -mode=http