ProHoster > Blog > fitantanan-draharaha > Alpine nanangona Docker manorina ho an'ny Python in-50 miadana kokoa, ary ny sary dia 2 heny mahery kokoa
Alpine nanangona Docker manorina ho an'ny Python in-50 miadana kokoa, ary ny sary dia 2 heny mahery kokoa
Alpine Linux dia matetika atolotra ho sary fototra ho an'ny Docker. Nolazaina taminao fa ny fampiasana Alpine dia hahatonga ny tranonao ho kely kokoa ary ny fizotry ny fananganana anao.
Fa raha mampiasa Alpine Linux ho an'ny rindranasa Python ianao dia:
Manamora ny fanangananao
Mampitombo ny sarinao
Mandany fotoana
Ary amin'ny farany dia mety hiteraka hadisoana amin'ny fotoana fandehanana
Andeha hojerentsika ny antony nanoroana an'i Alpine, fa nahoana ianao no tsy tokony hampiasa azy io amin'ny Python.
Nahoana ny olona no manoro an'i Alpine?
Andeha hojerentsika fa mila gcc ho ampahany amin'ny sarintsika isika ary te hampitaha ny Alpine Linux vs Ubuntu 18.04 amin'ny resaka hafainganam-pandeha sy ny haben'ny sary farany.
Voalohany, andao hisintona sary roa ary hampitaha ny habeny:
$ 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
Araka ny hitanao dia kely kokoa ny sary fototra ho an'ny Alpine. Andeha isika izao hanandrana hametraka gcc ary manomboka amin'ny 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/*
Ny fanoratana ny Dockerfile tonga lafatra dia mihoatra ny faritr'ity lahatsoratra ity.
Andeha refesina ny hafainganam-pandehan'ny fivoriambe:
$ 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
Averinay izany amin'ny Alpine (Dockerfile):
FROM alpine
RUN apk add --update gcc
Mivory izahay, jereo ny fotoana sy ny haben'ny fivoriambe:
$ 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
Araka ny nampanantenaina, ny sary miorina amin'ny Alpine dia voangona haingana kokoa ary kely kokoa: 15 segondra fa tsy 30 ary ny haben'ny sary dia 105MB mifanohitra amin'ny 150MB. Tena tsara!
Saingy raha mifindra amin'ny fananganana rindranasa Python isika, dia tsy dia rosy loatra ny zava-drehetra.
Sary Python
Ny fampiharana Python dia matetika mampiasa pandas sy matplotlib. Noho izany, safidy iray ny maka ny sary ofisialy miorina amin'ny Debian amin'ny fampiasana ity Dockerfile ity:
FROM python:3.8-slim
RUN pip install --no-cache-dir matplotlib pandas
Andao hanangona azy:
$ 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
Mahazo sary mirefy 363MB izahay.
Hanao tsara kokoa ve isika amin'ny Alpine? Andeha isika:
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
Fa inona no handeha?
Alpine tsy mahazaka kodia
Raha mijery ny fananganana ianao, izay mifototra amin'ny Debian, dia ho hitanao fa misintona matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.
Ity dia binary ho an'ny kodiarana. Alpine misintona ny loharano `matplotlib-3.1.2.tar.gz` satria tsy manohana ny fenitra kodiarana.
Nahoana? Ny ankamaroan'ny fizarana Linux dia mampiasa ny dikan-teny GNU (glibc) an'ny tranomboky manara-penitra C, izay ilain'ny programa rehetra voasoratra amin'ny C, anisan'izany ny Python. Fa ny Alpine dia mampiasa `musl`, ary satria natao ho an'ny `glibc` ireo binary ireo dia tsy safidy tsotra izao.
Noho izany, raha mampiasa Alpine ianao dia mila manangona ny kaody rehetra voasoratra amin'ny C amin'ny fonosana Python tsirairay.
Oh, eny, tsy maintsy mitady ny lisitry ny fiankinan-doha toy izany ianao izay mila angonina ny tenanao.
Amin'ity tranga ity dia mahazo izao isika:
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
Ary ny fotoana fananganana dia mitaky ...
... 25 minitra 57 segondra! Ary ny haben'ny sary dia 851MB.
Ny sary miorina amin'ny alpine dia maharitra ela kokoa ny fananganana azy, lehibe kokoa ny habeny, ary mbola mila mitady ny fiankinan-doha rehetra ianao. Mazava ho azy fa azonao atao ny mampihena ny haben'ny fivoriambe amin'ny fampiasana fananganana sehatra maro fa midika izany fa mbola mila asa bebe kokoa.
Tsy izay ihany!
Alpine dia mety hiteraka bibikely tsy ampoizina mandritra ny fotoana fiasana
Amin'ny teoria, ny musl dia mifanaraka amin'ny glibc, saingy amin'ny fampiharana dia mety hiteraka olana maro ny fahasamihafana. Ary raha izany no izy, dia mety ho tsy mahafinaritra. Ireto misy olana mety hitranga:
Azo antoka fa efa voahitsy ireo lesoka ireo, fa iza no mahalala fa mbola ho maro ihany izany.
Aza mampiasa sary Alpine ho an'ny Python
Raha tsy te hanahirana amin'ny fananganana lehibe sy lava ianao, mitady fiankinan-doha sy fahadisoana mety hitranga, aza mampiasa Alpine Linux ho sary fototra. Mifidy sary fototra tsara.