Alpine waxay ururisaa Docker waxay u dhistaa Python 50 jeer gaabis ah, sawiraduna 2 jeer ayay ka culus yihiin

Alpine waxay ururisaa Docker waxay u dhistaa Python 50 jeer gaabis ah, sawiraduna 2 jeer ayay ka culus yihiin

Alpine Linux waxaa inta badan lagula taliyaa inay noqoto sawirka aasaasiga ah ee Docker. Waxaa laguu sheegay in isticmaalka Alpine ay ka dhigi doonto dhismooyinkaaga mid yar oo habkaaga dhismuhu si dhakhso ah.

Laakiin haddii aad u isticmaasho Alpine Linux codsiyada Python, markaa waa:

  • Waxay ka dhigtaa dhismooyinkaaga mid aad u gaabis ah
  • Waxay ka dhigtaa sawiradaada mid weyn
  • Waqti kaa lumiya
  • Oo dhamaadka waxay keeni kartaa khaladaad in Runtime


Aynu eegno sababta Alpine loogu taliyay, laakiin sababta aadan weli ugu isticmaalin Python.

Maxay dadku ugu talinayaan Alpine?

Aynu ka soo qaadno inaan u baahanahay gcc oo qayb ka ah sawirkayaga waxaanan rabnaa inaan is barbar dhigno Alpine Linux vs Ubuntu 18.04 xagga xawaaraha dhismaha iyo cabbirka sawirka kama dambaysta ah.

Marka hore, aan soo dejinno laba sawir oo aan is barbar dhigno cabbirkooda:

$ 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

Sida aad arki karto, sawirka saldhigga ah ee Alpine aad ayuu u yar yahay. Aynu hadda isku dayno in aan rakibno gcc oo aan ku bilowno 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/*

Qoritaanka Dockerfile-ka saxda ah ayaa ka baxsan xadka qodobkan.

Aynu cabbirno xawaaraha isku-xidhka:

$ 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

Waxaan ku celineynaa isla Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Waanu isu-ururnaa, eegnaa wakhtiga iyo xajmiga shirka:

$ 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

Sidii ballanku ahaa, sawirada Alpine-ku-salaysan si dhakhso leh ayaa loo ururiyaa oo way ka yar yihiin: 15 ilbiriqsi halkii 30 iyo cabbirka sawirku waa 105MB iyo 150MB. Way fiicantahay!

Laakiin haddii aan u beddelno dhisidda arjiga Python, markaa wax walba maahan kuwo qurux badan.

Sawirka Python

Codsiyada Python badanaa waxay isticmaalaan pandas iyo matplotlib. Sidaa darteed, hal ikhtiyaar ayaa ah in la qaado sawirka rasmiga ah ee Debian-ku-salaysan adoo isticmaalaya Dockerfile:

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

Aan soo ururino:

$ 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

Waxaan helnaa sawir cabirkiisu yahay 363MB.
Ma ku fiicnaan doonaa Alpine? Aan isku dayno:

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

Maxaa socda?

Alpine ma taageerto taayirrada

Haddii aad eegto dhismaha, kaas oo ku salaysan Debian, waxaad arki doontaa in ay soo dejiso matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.wlh.

Kani waa binary for wheel. Alpine waxay soo dejisaa ilaha 'matplotlib-3.1.2.tar.gz'maadaama aysan taageersanayn heerka giraangiraha.

Waa maxay sababtu? Inta badan qaybinta Linux waxay isticmaashaa nooca GNU (glibc) ee maktabadda caadiga ah ee C, taas oo runtii looga baahan yahay barnaamij kasta oo ku qoran C, oo uu ku jiro Python. Laakiin Alpine waxay isticmaashaa 'musl', oo maadaama kuwan ikhtiyaariga ah loogu talagalay 'glibc', kaliya maahan ikhtiyaar.

Sidaa darteed, haddii aad isticmaasho Alpine, waxaad u baahan tahay inaad ururiso dhammaan koodka ku qoran C ee xirmo kasta oo Python ah.

Oh, haa, waa inaad raadisaa liiska dhammaan waxyaalaha ku tiirsanaanta ah ee u baahan in la soo ururiyo.
Xaaladdan oo kale waxaan helnaa tan:

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

Oo wakhtiga dhismuhu waxa uu qaadanayaa...

... 25 daqiiqo 57 ilbiriqsi! Cabirka sawirkuna waa 851MB.

Sawirada Alpine-ku-salaysan waxay qaadataa waqti dheer in la dhiso, way ka weyn yihiin cabbirka, oo waxaad weli u baahan tahay inaad raadiso dhammaan ku-tiirsanaanta. Dabcan waad yareyn kartaa cabbirka kulanka adigoo isticmaalaya dhismayaal badan laakiin taasi waxay ka dhigan tahay in xitaa shaqo badan loo baahan yahay in la qabto.

Intaasi kuma eka!

Alpine waxa laga yaabaa inay keento kutaan aan la filayn wakhtiga runtime

  • Aragti ahaan, muslku wuxuu la jaan qaadayaa glibc, laakiin ficil ahaan kala duwanaanshuhu wuxuu keeni karaa dhibaatooyin badan. Oo haddii ay jiraan, waxay u badan tahay inay noqon doonaan kuwo aan fiicnayn. Waa kuwan qaar ka mid ah dhibaatooyinka laga yaabo inay dhacaan:
  • Alpine waxay leedahay xajmi yar oo dunta lagu xidho si caadi ah, taasoo keeni karta khaladaadka Python
  • Isticmaalayaasha qaar ayaa taas ogaaday Codsiyada Python ayaa ah kuwo gaabis ah sababtoo ah habka musl u qoondeeyo xusuusta (oo ka duwan glibc).
  • Mid ka mid ah dadka isticmaala la helay khalad markii la qaabaynayey taariikhda

Hubaal khaladaadkaas waa la saxay, yaase garan kara inta kale ee jiri doonta.

Ha u isticmaalin sawirada Alpine ee Python

Haddii aadan rabin inaad ku dhibto dhismayaal waaweyn oo dhaadheer, raadinta ku-tiirsanaanta iyo khaladaadka suurtagalka ah, ha u isticmaalin Alpine Linux sida sawirka aasaasiga ah. Doorashada sawir sal oo wanaagsan.

Source: www.habr.com

Add a comment