получил ошибку pip при попытке преобразовать существующий файл докеров для использования образа без дистрибутива
у меня есть
dockerfile
в котором я использую
python:3.9.2-slim-buster
в качестве базового изображения, и я делаю следующее.
FROM lab.com:5000/python:3.9.2-slim-buster
ENV PYTHONPATH=base_platform_update
RUN apt-get update && apt-get install -y curl && apt-get clean
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
RUN chmod +x ./kubectl
RUN mv ./kubectl /usr/local/bin
WORKDIR /script
RUN pip install SomePackage
COPY base_platform_update ./base_platform_update
ENTRYPOINT ["python3", "base_platform_update/core/main.py"]
Я хочу преобразовать это, чтобы использовать образ без дистрибутива. Я пробовал, но не работает. Я нашел эти ресурсы
- https://github.com/GoogleContainerTools/distroless/blob/main/examples/python3/Dockerfile
- https://www.abhaybhargav.com/stories-of-my-experiments-with-distroless-containers/
Я знаю, что это неверно, но это то, что я придумал после просмотра этих ресурсов.
# first stage
FROM lab.com:5000/python:3.9.2-slim-buster AS build-env
WORKDIR /script
COPY base_platform_update ./base_platform_update
RUN apt-get update && apt-get install -y curl && apt-get clean
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
RUN mv ./kubectl /usr/local/bin
# second stage
FROM gcr.io/distroless/python3
WORKDIR /script
COPY --from=build-env /script/base_platform_update ./base_platform_update
COPY --from=build-env /usr/local/bin/kubectl /usr/local/bin/kubectl
COPY --from=build-env /bin/chmod /bin/chmod
COPY --from=build-env /usr/local/bin/pip /usr/local/bin/pip
RUN chmod +x /usr/local/bin/kubectl
ENV PYTHONPATH=base_platform_update
RUN pip install SomePackage
ENTRYPOINT ["python3", "base_platform_update/core/main.py"]
это дает следующую ошибку:
/bin/sh: 1: pip: not found
The command '/bin/sh -c pip install SomePackage' returned a non-zero code: 127
Я тоже думал о переезде
RUN pip install SomePackage
до первого этапа, но они не могли понять, как это сделать.
Любая помощь будет оценена по достоинству. Спасибо
1 ответ
Возможно, вам нужно добавить этот каталог в PATH.
ENV PATH="/usr/local/bin:$PATH"
Учтите, хотя окончательная разница в размере изображения после добавления всех этих зависимостей может не стоить всех хлопот.
последнее изображение с тегом
Образы без дистрибутивов предназначены только для среды выполнения, в результате вы не можете (по умолчанию) использовать диспетчер пакетов python для установки пакетов, см. Readme проекта Google GitHub
Образы «без дистрибутивов» содержат только ваше приложение и его зависимости времени выполнения. Они не содержат менеджеров пакетов, оболочек или каких-либо других программ, которые вы ожидаете найти в стандартном дистрибутиве Linux.
вы можете установить пакеты на втором новом этапе и скопировать установленные пакеты с него на третий, но это не обязательно сработает из-за целевой ОС, для которой предназначен пакет, несовместимости между вторым и третьим этапами и т. д.
Вы можете упаковать свое приложение в двоичный файл, используя любое количество библиотек python, но это зависит от того, сколько вам нужно.