如何在Golang中使用gRPC减小docker映像的大小?

时间:2019-02-18 08:21:36

标签: docker go grpc

我有一些服务器和客户端正在使用gRPC / golang进行通信。现在我想对应用程序进行容器化,但是包含goland执行和grpc支持的docker映像的大小更大(超过1GB)。我想减小docker映像的大小。

所需的golang版本为1.9及更高版本。这是给出的Dockerfile脚本。如果还有其他方法,请提出建议。

protected override void OnModelCreating (System.Data.Entity.DbModelBuilder modelBuilder)
{
     var myClassEntity = modelBuilder.Entity<MyClass>();

     // MyClass has a property MyText with a maximum length of 10
     myClassEntity.Property(entity => entity.MyText
                  .HasMaxLength(10);

     ... configure other MyClass properties.
}

2 个答案:

答案 0 :(得分:1)

尝试制作这样的多阶段docker映像

# Compile stage
FROM golang:1.11 as build-env

RUN apt-get update && \
    apt-get -y install git unzip build-essential autoconf libtool

RUN git clone https://github.com/google/protobuf.git && \
    cd protobuf && \
    ./autogen.sh && \
    ./configure && \
    make && \
    make install && \
    ldconfig && \
    make clean && \
    cd .. && \
    rm -r protobuf

RUN go get google.golang.org/grpc

RUN go get github.com/golang/protobuf/protoc-gen-go

RUN ls -la

WORKDIR /helloworld

COPY . /helloworld

RUN protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
RUN go build -o server helloworld/greeter_server/main.go

# Making image
FROM alpine:3.8 AS host
RUN apk add --no-cache \
        ca-certificates
COPY --from=build-env /helloworld/server /
# copy any other files you need

WORKDIR /
EXPOSE 8000
CMD ["server"]

答案 1 :(得分:0)

您可以尝试使用distroless基础图像和多阶段构建。这可能会对您有所帮助。