I-Alpine ihlanganisa i-Docker yakhela i-Python izikhathi ezingu-50 kancane, futhi izithombe zisinda izikhathi ezingu-2

I-Alpine ihlanganisa i-Docker yakhela i-Python izikhathi ezingu-50 kancane, futhi izithombe zisinda izikhathi ezingu-2

I-Alpine Linux ivame ukunconywa njengesithombe esiyisisekelo se-Docker. Utshelwa ukuthi ukusebenzisa i-Alpine kuzokwenza izakhiwo zakho zibe zincane futhi inqubo yakho yokwakha isheshe.

Kepha uma usebenzisa i-Alpine Linux yezinhlelo zokusebenza zePython, bese:

  • Yenza ukwakheka kwakho kube kancane kakhulu
  • Yenza izithombe zakho zibe zinkulu
  • Ukumosha isikhathi sakho
  • Futhi ekugcineni kungabangela amaphutha ngesikhathi sokusebenza


Ake sibheke ukuthi kungani i-Alpine inconywa, kodwa kungani ungakayisebenzisi nePython.

Kungani abantu bencoma i-Alpine?

Ake sicabange ukuthi sidinga i-gcc njengengxenye yesithombe sethu futhi sifuna ukuqhathanisa i-Alpine Linux vs Ubuntu 18.04 ngokuya ngesivinini sokwakha nosayizi wokugcina wesithombe.

Okokuqala, ake silande izithombe ezimbili futhi siqhathanise osayizi bazo:

$ 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

Njengoba ubona, isithombe esiyisisekelo se-Alpine sincane kakhulu. Manje ake sizame ukufaka i-gcc futhi siqale ngo-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/*

Ukubhala i-Dockerfile ephelele kungaphezu kobubanzi balesi sihloko.

Ake silinganise isivinini sokuhlanganisa:

$ 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

Siphinda okufanayo ku-Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Siyahlangana, sibheke isikhathi nobukhulu bomhlangano:

$ 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

Njengoba kuthenjisiwe, izithombe ezisekelwe e-Alpine ziqoqwa ngokushesha futhi zincane: imizuzwana engu-15 esikhundleni sika-30 futhi usayizi wesithombe ungu-105MB uma uqhathaniswa no-150MB. Kuhle kakhulu!

Kepha uma sishintshela ekwakheni uhlelo lwePython, khona-ke yonke into ayinhle kangako.

Isithombe se-Python

Izinhlelo zokusebenza zePython zivame ukusebenzisa i-pandas ne-matplotlib. Ngakho-ke, inketho eyodwa ukuthatha isithombe esisemthethweni esekwe ku-Debian usebenzisa le Dockerfile:

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

Masiyiqoqe:

$ 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

Sithola isithombe esingu-363MB ngosayizi.
Sizokwenza kangcono nge-Alpine? Ake sizame:

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

Kwenzekani?

I-Alpine ayiwasekeli amasondo

Uma ubheka isakhiwo, esisekelwe ku-Debian, uzobona ukuthi ilanda i-matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.

Lena kanambambili yesondo. I-Alpine ilanda imithombo `matplotlib-3.1.2.tar.gz` njengoba ingasekeli izinga amasondo.

Kungani? Ukusabalalisa okuningi kwe-Linux kusebenzisa inguqulo ye-GNU (glibc) yelabhulali evamile ye-C, eqinisweni edingwa yizo zonke izinhlelo ezibhalwe ngo-C, kuhlanganise nePython. Kodwa i-Alpine isebenzisa `musl`, futhi njengoba labo kanambambili benzelwe `glibc`, abayona nje inketho.

Ngakho-ke, uma usebenzisa i-Alpine, udinga ukuhlanganisa yonke ikhodi ebhalwe ku-C kuphakheji ngayinye ye-Python.

O, yebo, kuzodingeka ubheke uhlu lwakho konke ukuncika okunjalo okudingeka uhlanganiswe ngokwakho.
Kulokhu sithola lokhu:

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

Futhi isikhathi sokwakha sithatha...

... imizuzu engama-25 imizuzwana engama-57! Futhi usayizi wesithombe ungu-851MB.

Izithombe ezisekelwe e-Alpine zithatha isikhathi eside ukwakhiwa, zikhulu ngosayizi, futhi kusadingeka ubheke konke okuncikile. Ungakwazi Yebo ukunciphisa usayizi umhlangano usebenzisa ukwakhiwa kwezigaba eziningi kodwa lokho kusho ukuthi mkhulu umsebenzi okufanele wenziwe.

Akugcini lapho!

I-Alpine ingase ibangele izimbungulu ezingalindelekile ngesikhathi sokusebenza

Impela la maphutha aselungisiwe, kodwa kwazi bani ukuthi azoba maningi kangakanani.

Ungasebenzisi izithombe ze-Alpine kuPython

Uma ungafuni ukuzihlupha ngokwakhiwa okukhulu nokude, ukucinga ukuncika namaphutha angaba khona, ungasebenzisi i-Alpine Linux njengesithombe esiyisisekelo. Ukukhetha isithombe esiyisisekelo esihle.

Source: www.habr.com

Engeza amazwana