Mik*_*ike 0 python docker grpc-python
我正在尝试在Python中使用grpc服务创建小型docker映像。为了了解其大小,我构建了一个基本的hello-world Python grpc服务。为了使它“小”,我使用了一个多阶段构建,从python:3.7-alpine开始,然后
1)为最终的python安装创建一个virtualenv
2)为grpc和protobuf添加必要的构建包
3)将virtualenv复制到基本安装
4)复制应用程序文件
泊坞窗文件如下:
FROM python:3.7-alpine as base
FROM base as builder
RUN adduser -D webuser
WORKDIR /home/webuser
RUN apk add --update \
gcc \
g++ \
make \
musl-dev \
python3-dev \
libc6-compat \
&& rm -rf /var/cache/apk/*
# create a virtual env
RUN python -m venv env
# install all requirements
RUN env/bin/pip install protobuf grpcio
FROM base
RUN adduser -D webuser
WORKDIR /home/webuser
COPY --from=builder /home/webuser/env/ env/
# copy the app files
COPY hello/gen-py/ ./
COPY hello/hello.py ./
COPY boot.sh ./
# make webuser the owner of the main folder
RUN chown -R webuser:webuser ./
# activate webuser
USER webuser
# boot.sh is the executable script that basically runs python
# from the env with the grpc server hello.py
RUN chmod +x boot.sh
EXPOSE 50051
ENTRYPOINT ["./boot.sh"]
Run Code Online (Sandbox Code Playgroud)
就大小而言,我有:
python:3.7-alpine 87MB
"builder" 396MB
hello_app:latest 188MB
Run Code Online (Sandbox Code Playgroud)
那仍然是一个非常大的hello world应用程序。我在C ++中构建了一个类似的文件,只有12.4MB。我不了解尺寸方面的几件事
我的环境大小为51.1 MB,基本的python为93.5MB(基于python:3.7-alpine中的du -sh /。尚不清楚为什么它大于docker image ls中报告的87MB)。总计为144.6MB,但仍然报告为188MB。
我的主要问题:如何以尽可能少的开销创建Python GRPC服务?其他问题:有人可以解释docker的大小吗?当仅添加50MB虚拟环境时,为什么docker向基础映像报告+ 100MB。
小智 5
我可以告诉您额外的50MB来自何处。如果您致电,docker image history hello_app:latest您将看到该chown呼叫创建了一个消耗约50 MB的层。显然,docker无法以紧凑的方式保存更改后的所有者。
改为使用--chown标志COPY。例如:
COPY --chown=webuser:webuser --from=builder /home/webuser/env/ env/。
这样,便可以使用正确的所有者创建文件,并且可以删除RUN chown …。
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |