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
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
Akugcini lapho!
I-Alpine ingase ibangele izimbungulu ezingalindelekile ngesikhathi sokusebenza
- Ngokombono, i-musl iyahambisana ne-glibc, kodwa empeleni umehluko ungabangela izinkinga eziningi. Futhi uma kunjalo, cishe ngeke bajabule. Nazi ezinye izinkinga ezingase zenzeke:
- I-Alpine inosayizi wesitaki sochungechunge omncane ngokuzenzakalelayo, okungaholela kokuthi
amaphutha kuPython - Abanye abasebenzisi bathole lokho
Izinhlelo zokusebenza zePython zihamba kancane ngenxa yendlela i-musl eyaba ngayo inkumbulo (ehlukile ku-glibc). - Omunye wabasebenzisi
ithole iphutha ngenkathi ifometha idethi
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.
Source: www.habr.com