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:
  • Alpine dia manana habe antonta kofehy kely kokoa amin'ny alΓ lan'ny default, izay mety hitarika amin'ny fahadisoana amin'ny Python
  • Hitan'ny mpampiasa sasany izany Miadana kokoa ny fampiharana Python noho ny fomba anomezan'ny musl fahatsiarovana (tsy mitovy amin'ny glibc).
  • Iray amin'ireo mpampiasa nahita hadisoana tamin'ny fandrafetana ny daty

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.

Source: www.habr.com

Add a comment