Ka whakahiatohia e Alpine nga hangahanga a Docker mo Python 50 nga wa puhoi ake, a ko nga whakaahua he 2 nga wa taumaha ake

Ka whakahiatohia e Alpine nga hangahanga a Docker mo Python 50 nga wa puhoi ake, a ko nga whakaahua he 2 nga wa taumaha ake

Ko te Alpine Linux he maha nga wa e taunakihia ana hei ahua turanga mo Docker. Ko te korero ki a koe ma te whakamahi i te Alpine ka iti ake o hanga me te tere o to mahi hanga.

Engari ki te whakamahi koe i te Alpine Linux mo nga tono Python, na:

  • Ka puhoi ake to hanga
  • Ka nui ake o whakaahua
  • Te moumou taima
  • A, i te mutunga ka puta he hapa i te wa whakahaere


Me titiro tatou he aha te Alpine i taunakihia ai, engari he aha koe e kore ai e whakamahi me te Python.

He aha nga tangata ka tūtohu Alpine?

Me whakaaro tatou e hiahia ana tatou ki te gcc hei waahanga o to maatau ahua me te hiahia ki te whakataurite i te Alpine Linux me te Ubuntu 18.04 mo te tere hanga me te rahi o te ahua whakamutunga.

Tuatahi, me tango e rua nga whakaahua ka whakataurite i o raatau rahi:

$ docker pull --quiet ubuntu:18.04
docker.io/library/ubuntu:18.04
$ docker pull --quiet alpine
docker.io/library/alpine:latest
$ docker image ls ubuntu:18.04
REPOSITORY          TAG        IMAGE ID         SIZE
ubuntu              18.04      ccc6e87d482b     64.2MB
$ docker image ls alpine
REPOSITORY          TAG        IMAGE ID         SIZE
alpine              latest     e7d92cdc71fe     5.59MB

Ka taea e koe te kite, he iti ake te ahua o te ahua mo Alpine. Me ngana ki te whakauru i te gcc ka tiimata me te Ubuntu:

FROM ubuntu:18.04
RUN apt-get update && 
    apt-get install --no-install-recommends -y gcc && 
    apt-get clean && rm -rf /var/lib/apt/lists/*

Ko te tuhi i te Dockerfile tino pai kei tua atu i te waahanga o tenei tuhinga.

Me ine i te tere o te huihuinga:

$ time docker build -t ubuntu-gcc -f Dockerfile.ubuntu --quiet .
sha256:b6a3ee33acb83148cd273b0098f4c7eed01a82f47eeb8f5bec775c26d4fe4aae

real    0m29.251s
user    0m0.032s
sys     0m0.026s
$ docker image ls ubuntu-gcc
REPOSITORY   TAG      IMAGE ID      CREATED         SIZE
ubuntu-gcc   latest   b6a3ee33acb8  9 seconds ago   150MB

Ka whakahoki ano matou mo Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Ka huihui matou, tirohia te wa me te rahi o te huihuinga:

$ time docker build -t alpine-gcc -f Dockerfile.alpine --quiet .
sha256:efd626923c1478ccde67db28911ef90799710e5b8125cf4ebb2b2ca200ae1ac3

real    0m15.461s
user    0m0.026s
sys     0m0.024s
$ docker image ls alpine-gcc
REPOSITORY   TAG      IMAGE ID       CREATED         SIZE
alpine-gcc   latest   efd626923c14   7 seconds ago   105MB

I oatihia, he tere ake te kohia o nga whakaahua a Alpine me te iti ake: 15 hēkona kaua e 30 me te rahi o te ahua ko te 105MB ki te 150MB. He tino pai!

Engari ki te huri tatou ki te hanga i tetahi tono Python, karekau nga mea katoa e tino maamaa.

Whakaahua Python

Ka whakamahia e nga tono Python nga pandas me te matplotlib. Na reira, ko tetahi waahanga ko te tango i te ahua o Debian-a-ringa ma te whakamahi i tenei Dockerfile:

FROM python:3.8-slim
RUN pip install --no-cache-dir matplotlib pandas

Kia kohi tatou:

$ docker build -f Dockerfile.slim -t python-matpan.
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM python:3.8-slim
 ---> 036ea1506a85
Step 2/2 : RUN pip install --no-cache-dir matplotlib pandas
 ---> Running in 13739b2a0917
Collecting matplotlib
  Downloading matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl (13.1 MB)
Collecting pandas
  Downloading pandas-0.25.3-cp38-cp38-manylinux1_x86_64.whl (10.4 MB)
...
Successfully built b98b5dc06690
Successfully tagged python-matpan:latest

real    0m30.297s
user    0m0.043s
sys     0m0.020s

Ka whiwhi tatou i te ahua o te 363MB te rahi.
Ka pai ake taatau ki a Alpine? Kia tamata tatou:

FROM python:3.8-alpine
RUN pip install --no-cache-dir matplotlib pandas

$ docker build -t python-matpan-alpine -f Dockerfile.alpine .                                 
Sending build context to Docker daemon  3.072kB                                               
Step 1/2 : FROM python:3.8-alpine                                                             
 ---> a0ee0c90a0db                                                                            
Step 2/2 : RUN pip install --no-cache-dir matplotlib pandas                                                  
 ---> Running in 6740adad3729                                                                 
Collecting matplotlib                                                                         
  Downloading matplotlib-3.1.2.tar.gz (40.9 MB)                                               
    ERROR: Command errored out with exit status 1:                                            
     command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/
tmp/pip-install-a3olrixa/matplotlib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-a3olrixa/matplotlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-a3olrixa/matplotlib/pip-egg-info                              

...
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
The command '/bin/sh -c pip install matplotlib pandas' returned a non-zero code: 1

He aha kei te haere?

Kaore a Alpine e tautoko i nga wira

Mena ka titiro koe ki te hanga, kei runga i a Debian, ka kite koe kei te tango matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.

He tohu-rua tenei mo te wira. Ka tango a Alpine i nga puna `matplotlib-3.1.2.tar.gz` i te mea kaore i te tautoko i te paerewa wira.

He aha? Ko te nuinga o nga tohatoha Linux e whakamahi ana i te putanga GNU (glibc) o te whare pukapuka paerewa C, e hiahiatia ana e ia papatono kua tuhia ki te C, tae atu ki te Python. Engari kei te whakamahi a Alpine i te `musl`, na te mea i hangaia aua rua mo te `glibc`, ehara i te mea he whiringa.

No reira, ki te whakamahi koe i te Alpine, me whakahiato e koe nga waehere katoa kua tuhia ki te C ki ia kete Python.

Ae, me rapu koe mo te rarangi o nga momo whakawhirinakitanga katoa me whakahiato koe.
I tenei keehi ka whiwhi tatou i tenei:

FROM python:3.8-alpine
RUN apk --update add gcc build-base freetype-dev libpng-dev openblas-dev
RUN pip install --no-cache-dir matplotlib pandas

A ka roa te wa hanga ...

... 25 meneti 57 hēkona! A ko te rahi o te ahua ko 851MB.

He roa ake te hanga o nga whakaahua a-Alpine, he nui ake te rahi, me rapu tonu koe mo nga whakawhirinakitanga katoa. Ka taea e koe te whakaiti i te rahi o te huihuinga ma te whakamahi hanga maha-waahanga engari ko te tikanga me nui ake te mahi.

E kore koira katoa!

Ka taea e Alpine te hanga i nga pepeke ohorere i te wa whakahaere

  • I roto i te ariā, he hototahi te musl ki te glibc, engari i roto i nga mahi ka raru pea nga rereketanga. A, ki te he ratou, kare pea e pai. Anei etahi raruraru ka puta pea:
  • He iti ake te rahi o te puranga miro a Alpine ma te taunoa, tera pea ka puta hapa i roto i te Python
  • Kua kitea e etahi o nga kaiwhakamahi He puhoi ake nga tono Python na te huarahi e tohatoha mahara ai a musl (he rereke mai i te glibc).
  • Ko tetahi o nga kaiwhakamahi i kitea he hapa i te whakahōputu i te rā

He pono kua whakatikahia enei hapa, engari ko wai ka mohio e hia kee atu.

Kaua e whakamahia nga whakaahua Alpine mo Python

Mena kaore koe e hiahia ki te whakararuraru i nga hanga nui me te roa, te rapu i nga whakawhirinaki me nga hapa pea, kaua e whakamahi i te Alpine Linux hei ahua turanga. Te whiriwhiri i te ahua pai o te turanga.

Source: will.com

Tāpiri i te kōrero