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 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
$ 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
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