[uanog] GCC-devel only during container building

Volodymyr Litovka doka at xlit.one
Wed Jan 27 18:43:46 EET 2021


Спасибо всем ответившим, основа для дальнейшей оптимизации есть :)

On 26.01.2021 20:17, Volodymyr Litovka wrote:
>
> Привет,
>
> в первый раз в жизни собираю контейнер (требование такое, Александр 
> Васильевич, ёптить ;-) ) из питона и возникла незадача. В процессе pip 
> install требуется gcc для сборки библиотек для нескольких требуемых 
> питоновских пекеджей (описаны в requirements.txt)
>
> Я делаю вот такой Dockerfile:
>
> FROM alpine
> FROM python:3.9-alpine
> RUN apk add build-base libffi-dev openssl-dev
> RUN mkdir /opt/contapp
> WORKDIR  /opt/contapp
>
> COPY requirements.txt .
> RUN pip install --no-cache-dir -r requirements.txt
> RUN rm requirements.txt
> # Cleanup
> RUN apk del --purge build-base libffi-dev openssl-dev
>
> COPY core core
> COPY base base
>
> ENV PYTHONPATH "${PYTHONPATH}:/opt/contapp"
> ENTRYPOINT ["python3", "/opt/contapp/core/daemon.py"]
> При сборке картина следующая - после инсталла alpine рипортит 224Mb в 
> пекеджах (ожидаемо), после удаления - рипортит 15Mb в пекеджах (it's ok):
> Step 4/14 : RUN apk add build-base libffi libffi-dev openssl-dev
>   ---> Running in bafd9776ce4d
> fetchhttp://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
> fetchhttp://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
> (1/24) Installing libgcc (9.3.0-r2)
> (2/24) Installing libstdc++ (9.3.0-r2)
> (3/24) Installing binutils (2.34-r1)
> (4/24) Installing libmagic (5.38-r0)
> (5/24) Installing file (5.38-r0)
> (6/24) Installing gmp (6.2.0-r0)
> (7/24) Installing isl (0.18-r0)
> (8/24) Installing libgomp (9.3.0-r2)
> (9/24) Installing libatomic (9.3.0-r2)
> (10/24) Installing libgphobos (9.3.0-r2)
> (11/24) Installing mpfr4 (4.0.2-r4)
> (12/24) Installing mpc1 (1.1.0-r1)
> (13/24) Installing gcc (9.3.0-r2)
> (14/24) Installing musl-dev (1.1.24-r10)
> (15/24) Installing libc-dev (0.7.2-r3)
> (16/24) Installing g++ (9.3.0-r2)
> (17/24) Installing make (4.3-r0)
> (18/24) Installing fortify-headers (1.1-r0)
> (19/24) Installing patch (2.7.6-r6)
> (20/24) Installing build-base (0.5-r2)
> (21/24) Installing linux-headers (5.4.5-r1)
> (22/24) Installing pkgconf (1.7.2-r0)
> (23/24) Installing libffi-dev (3.3-r2)
> (24/24) Installing openssl-dev (1.1.1i-r0)
> Executing busybox-1.31.1-r19.trigger
> *OK: 224 MiB in 60 packages*
> [ ... ]
> Step 10/14 : RUN apk del --purge build-base libffi-dev openssl-dev
>   ---> Running in 709a88c5f43d
> (1/24) Purging build-base (0.5-r2)
> (2/24) Purging file (5.38-r0)
> (3/24) Purging g++ (9.3.0-r2)
> (4/24) Purging gcc (9.3.0-r2)
> (5/24) Purging binutils (2.34-r1)
> (6/24) Purging libatomic (9.3.0-r2)
> (7/24) Purging libgomp (9.3.0-r2)
> (8/24) Purging libgphobos (9.3.0-r2)
> (9/24) Purging libstdc++ (9.3.0-r2)
> (10/24) Purging make (4.3-r0)
> (11/24) Purging libc-dev (0.7.2-r3)
> (12/24) Purging musl-dev (1.1.24-r10)
> (13/24) Purging fortify-headers (1.1-r0)
> (14/24) Purging patch (2.7.6-r6)
> (15/24) Purging libffi-dev (3.3-r2)
> (16/24) Purging linux-headers (5.4.5-r1)
> (17/24) Purging openssl-dev (1.1.1i-r0)
> (18/24) Purging libgcc (9.3.0-r2)
> (19/24) Purging libmagic (5.38-r0)
> (20/24) Purging isl (0.18-r0)
> (21/24) Purging mpc1 (1.1.0-r1)
> (22/24) Purging mpfr4 (4.0.2-r4)
> (23/24) Purging gmp (6.2.0-r0)
> (24/24) Purging pkgconf (1.7.2-r0)
> Executing busybox-1.31.1-r19.trigger
> *OK: 15 MiB in 36 packages*
>
> но, по факту, это микро-факин-сервис получается размером 300+Mb, по 
> сравнению с 6+45Mb базовых образов:
>
> root at gk:/opt/tlspx# docker image list
> REPOSITORY   TAG          IMAGE ID       CREATED         SIZE
> contapp      latest       af34adc59bfa   8 seconds ago   328MB
> python       3.9-alpine   03c59395ddea   17 hours ago    44.9MB
> alpine       latest       7731472c3f2a   11 days ago     5.61MB
>
> Вопросы:
> - как вообще правильно выкрутиться в ситуации, когда devel set нужен 
> только в процессе сборки?
> - как  избавиться от всего лишнего, образовавшегося при сборке и не 
> нужного в runtime (вроде и делаю apk del --purge, но размер образа 
> остается такой, как будто и не удалял ничего)?
>
> Спасибо.
>
> -- 
> Volodymyr Litovka
>    "Vision without Execution is Hallucination." -- Thomas Edison

-- 
Volodymyr Litovka
   "Vision without Execution is Hallucination." -- Thomas Edison

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.uanog.kiev.ua/pipermail/uanog/attachments/20210127/367ce08b/attachment-0001.html>


More information about the uanog mailing list