Я пытаюсь создать небольшие образы докеров с помощью сервисов grpc на Python.Чтобы получить представление о размере, я создал базовый привет-сервис Python grpc.Чтобы сохранить его «маленьким», я использовал многоэтапную сборку, где я начинаю с python: 3.7-alpine, а затем
1) создаю virtualenv для окончательной установки на python
2) добавить необходимые пакеты сборки для grpc и protobuf
3) скопировать virtualenv в базовую установку
4) скопировать файлы приложения
Файл Docker выглядит следующим образом:
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"]
По размерам у меня есть:
python:3.7-alpine 87MB
"builder" 396MB
hello_app:latest 188MB
Это все еще очень большое приложение Hello World.Я построил аналогичный в C ++, который составляет всего 12,4 МБ.Я не понимаю несколько вещей с точки зрения размера
Мой env достигает 51,1 МБ, базовый питон - 93,5 МБ (на основе du -sh in / on python: 3.7-alpine. Это неМне понятно, почему это больше, чем 87 МБ, указанный в образе док-станции ls).В общей сложности это 144,6 МБ, но, тем не менее, сообщается, что оно составляет 188 МБ.
Мой главный вопрос: как я могу создавать Python GRPC-сервисы с минимальными издержками?Другие вопросы: Кто-нибудь может объяснить размеры докера?Почему докер сообщает + 100 МБ к базовому образу, когда добавляется только 50 МБ виртуального env.