#python #docker #dockerfile #buildx
Вопрос:
Система
Docker version 20.10.8, build 3967b7d
- Windows 10 Pro с рабочим столом Docker
В качестве требования я должен портировать свое приложение Python3.x для поддержки работы с arm/v7
оборудованием архитектуры. У меня есть рабочие процессы GitHub, которые можно создавать для linux/arm64
linux/amd64
платформ и архитектур. Одна из зависимостей заключается numpy
в том, что на этапе сборки время сборки превышает более 30 минут.
Его фаза создания колеса, похоже, не движется. Чтобы избежать сложностей в моих сборках, я избегаю использования alpine
образов на основе, но придерживаюсь slim
образов и устанавливаю необходимые пакеты в многоступенчатой сборке docker
Файл Dockerfile выглядит следующим образом:
FROM python:3.7-slim AS compile-image # This prevents Python from writing out pyc files ENV PYTHONDONTWRITEBYTECODE 1 # This keeps Python from buffering stdin/stdout ENV PYTHONUNBUFFERED 1 RUN apt-get update RUN apt-get install -y --no-install-recommends build-essential gcc RUN python -m venv /opt/venv # Make sure we use the virtualenv: ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY setup.py . COPY . . RUN pip install . FROM python:3.7-slim AS build-image COPY --from=compile-image /opt/venv /opt/venv COPY scripts/docker-entrypoint.sh /entrypoint.sh # Make sure we use the virtualenv: ENV PATH="/opt/venv/bin:$PATH" RUN chmod x /entrypoint.sh ENTRYPOINT [ "/entrypoint.sh" ] CMD ["app", "-c", "config.yaml"]
Выходы
docker buildx build --platform linux/arm/v/7 -t myDockerAcc/pyapp .
[ ] Building 162.2s (8/17) [ ] Building 1554.2s (10/17) =gt; [internal] load build definition from Dockerfile 0.1s =gt; =gt; transferring dockerfile: 1.67kB 0.0s =gt; [internal] load .dockerignore 0.1s =gt; =gt; transferring context: 2B 0.0s =gt; [internal] load metadata for docker.io/library/python:3.7-slim 2.2s =gt; [auth] library/python:pull token for registry-1.docker.io 0.0s =gt; CACHED [build-image 1/4] FROM docker.io/library/python:3.7-slim@sha256:c2cc09c3de140f59b3065b9518fa7beb5fbedb4414762963bfe01079ce219f2e 0.0s =gt; =gt; resolve docker.io/library/python:3.7-slim@sha256:c2cc09c3de140f59b3065b9518fa7beb5fbedb4414762963bfe01079ce219f2e 0.0s =gt; [internal] load build context 0.7s =gt; =gt; transferring context: 4.77kB 0.7s =gt; [compile-image 2/9] RUN apt-get update 31.8s =gt; [compile-image 3/9] RUN apt-get install -y --no-install-recommends build-essential gcc 102.7s =gt; [compile-image 4/9] RUN python -m venv /opt/venv 55.8s =gt; [compile-image 5/9] COPY requirements.txt . 0.3s =gt; [compile-image 6/9] RUN pip install --no-cache-dir -r requirements.txt 1361.0s =gt; =gt; # Building wheel for numpy (PEP 517): started =gt; =gt; # Building wheel for numpy (PEP 517): still running... =gt; =gt; # Building wheel for numpy (PEP 517): still running...
Существуют ли определенные оптимизации, которые необходимо настроить / настроить во время таких кроссплатформенных сборок, чтобы сократить время сборки для создания numpy
scipy
или создания колес pandas
?
Ответ №1:
Я столкнулся с той же проблемой. Разница opencv
в том, что на сборку уходило слишком много времени, и результат был тот же Building wheel for opencv (PEP 517): still running...
Изменение версии изображения python в файле Dockerfile решило мою проблему. Попробуйте один раз python:3.7-buster
, и это не займет много времени для создания numpy.
Комментарии:
1. но используете ли вы также окончательное изображение для отправки в качестве
buster
базового изображения или только для создания требований opencv?2. чтобы тоже отправить. Я понимаю, что он тяжелее, чем тонкий, но не настолько тяжелый, он все равно будет легким. Кроме того, вы также можете попробовать другие вкусы, если изменение версии подходит для вас.