Alpine tuufaatasia Docker fausia mo Python 50 taimi lemu, ma ata e 2 taimi sili atu le mamafa

Alpine tuufaatasia Docker fausia mo Python 50 taimi lemu, ma ata e 2 taimi sili atu le mamafa

Alpine Linux e masani ona fautuaina e avea o se ata faavae mo Docker. O lo'o ta'u atu ia te oe o le fa'aaogaina o le Alpine o le a fa'aiti'itia ai au faufale ma fa'avave ai lau faufale.

Ae afai e te faʻaaogaina le Alpine Linux mo talosaga Python, ona:

  • E fa'agesegese ai au faufale
  • Fa'ateleina au ata
  • Ma'imau lou taimi
  • Ma i le faaiuga e mafai ona mafua ai mea sese i le taimi faʻataʻavalevale


Sei o tatou vaʻai pe aisea ua fautuaina ai le Alpine, ae aisea e le tatau ai ona e faʻaaogaina i le Python.

Aisea e fautuaina ai e tagata le Alpine?

Sei o tatou manatu tatou te manaʻomia le gcc o se vaega o la tatou ata ma tatou te mananaʻo e faʻatusatusa le Alpine Linux ma le Ubuntu 18.04 i tulaga o le saoasaoa o le fausiaina ma le tele o ata mulimuli.

Muamua, se'i o tatou la'u mai ata se lua ma fa'atusatusa le lapopo'a:

$ 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

E pei ona e vaʻaia, o le ata autu mo Alpine e laʻititi. Sei o tatou taumafai nei e faʻapipiʻi le gcc ma amata ile 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/*

O le tusiaina o le Dockerfile atoatoa e sili atu i le lautele o lenei tusiga.

Se'i o tatou fuaina le saoasaoa o le fa'apotopotoga:

$ 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

Matou te toe fai tutusa mo Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Matou te faʻapotopoto, vaʻai i le taimi ma le tele o le faʻapotopotoga:

$ 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

E pei ona folafola mai, o ata e fa'atatau i le Alpine e vave aoina ma e la'ititi: 15 sekone nai lo le 30 ma le tele o ata o le 105MB fa'asaga i le 150MB. E manaia tele!

Ae afai tatou te fesuiaʻi i le fausiaina o se Python application, o mea uma e le o se mea manaia tele.

Ata Python

O talosaga Python e masani ona faʻaaoga pandas ma matplotlib. O le mea lea, o le tasi filifiliga o le ave lea o le ata aloaia a Debian e faʻaaoga ai lenei Dockerfile:

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

Tatou aoina mai:

$ 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

Matou te maua se ata o le 363MB i le tele.
O le a sili atu la tatou mea i Alpine? Tatou taumafai:

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

O le a le mea o loʻo tupu?

Alpine e le lagolagoina uili

Afai e te vaʻai i le fausiaina, lea e faʻavae i luga o Debian, o le a e vaʻaia o loʻo siiina mai matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.

Ole binary lea mo uili. Alpine la'uina mai puna'oa `matplotlib-3.1.2.tar.gz' talu ai e le lagolagoina tulaga uili.

Aisea? O le tele o fa'asalalauga Linux e fa'aaogaina le GNU version (glibc) o le C standard library, lea e mana'omia e polokalame uma e tusia i le C, e aofia ai le Python. Ae o Alpine e faʻaaogaina le 'musl', ma talu ai o na binaries ua mamanuina mo 'glibc', e le o se filifiliga.

O le mea lea, afai e te faʻaaogaina Alpine, e tatau ona e faʻapipiʻi uma tulafono tusitusia i le C i totonu o pusa Python taʻitasi.

Oi, ioe, e tatau ona e suʻeina le lisi o ia faʻalagolago uma e manaʻomia ona tuʻufaʻatasia e oe lava.
I lenei tulaga tatou te maua le mea lenei:

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

Ma o le taimi o le fausiaina e manaʻomia ...

... 25 minute 57 sekone! Ma o le tele o ata e 851MB.

O ata e fa'avae i luga ole alpine e umi se taimi e fau ai, e lapo'a tele, ma e mana'omia lava lou su'eina o fa'alagolago uma. E mafai moni lava ona fa'aititia le tele o fa'apotopotoga fa'aaoga fau-vaega fau ae o lona uiga e sili atu galuega e tatau ona fai.

E le na o le pau!

Alpine e mafai ona mafua ai ni faʻalavelave faʻafuaseʻi i le taimi o le taʻavale

  • I le talitonuga, o le musl e fetaui ma le glibc, ae i le faʻatinoga o eseesega e mafai ona mafua ai le tele o faʻafitauli. Ma afai o lea, atonu o le a latou le fiafia. O nisi nei o fa'afitauli e ono tula'i mai:
  • Alpine e la'ititi la'ititi le fa'aputuga o filo ona o le faaletonu, lea e mafai ona o'o atu ai mea sese i le Python
  • Ua maua e nisi tagata fa'aoga lena mea Python talosaga e telegese ona o le auala e faʻasoa ai e musl le manatua (e ese mai le glibc).
  • Tasi o le au faʻaoga maua se mea sese i le faavasegaina o le aso

E mautinoa lava o nei mea sese ua uma ona faasaʻoina, ae o ai na te iloa pe toafia nisi o le a iai.

Aua le fa'aogaina ata Alpine mo le Python

Afai e te le manaʻo e faʻalavelave i fale tetele ma umi, suʻesuʻe mo faʻalagolago ma mea sese, aua le faʻaogaina Alpine Linux o se ata faʻavae. Filifilia o se ata faavae lelei.

puna: www.habr.com

Faaopoopo i ai se faamatalaga