Alpine yana tattara Docker yana ginawa Python sau 50 a hankali, kuma hotuna sun fi nauyi sau 2

Alpine yana tattara Docker yana ginawa Python sau 50 a hankali, kuma hotuna sun fi nauyi sau 2

Yawancin lokaci ana ba da shawarar Alpine Linux azaman hoton tushe don Docker. An gaya muku cewa yin amfani da Alpine zai sa ginin ku ya zama ƙarami kuma tsarin ginin ku cikin sauri.

Amma idan kuna amfani da Alpine Linux don aikace-aikacen Python, to shine:

  • Yana sa ginin ku ya yi hankali sosai
  • Yana sanya hotunanku girma
  • Bata lokacinku
  • Kuma a ƙarshe yana iya haifar da kurakurai a lokacin aiki


Bari mu ga dalilin da yasa ake ba da shawarar Alpine, amma me yasa har yanzu bai kamata ku yi amfani da shi da Python ba.

Me yasa mutane ke ba da shawarar Alpine?

Bari mu ɗauka cewa muna buƙatar gcc a matsayin ɓangare na hotonmu kuma muna son kwatanta Alpine Linux vs Ubuntu 18.04 dangane da saurin ginawa da girman hoto na ƙarshe.

Da farko, bari mu zazzage hotuna biyu kuma mu kwatanta girmansu:

$ 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

Kamar yadda kake gani, hoton tushe na Alpine ya fi karami. Bari mu yi ƙoƙarin shigar da gcc kuma mu fara da 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/*

Rubuta cikakkiyar Dockerfile ya wuce iyakar wannan labarin.

Bari mu auna saurin taro:

$ 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

Muna maimaita iri ɗaya don Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Muna taruwa, duba lokaci da girman taron:

$ 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

Kamar yadda aka yi alkawari, ana tattara hotuna masu tushe cikin sauri kuma sun fi ƙanƙanta: 15 seconds maimakon 30 kuma girman hoton shine 105MB akan 150MB. Yana da kyau kyakkyawa!

Amma idan muka canza zuwa gina aikace-aikacen Python, to komai ba shi da ja.

Hoton Python

Aikace-aikacen Python galibi suna amfani da pandas da matplotlib. Don haka, zaɓi ɗaya shine ɗaukar hoto na tushen Debian ta amfani da wannan Dockerfile:

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

Mu tattara:

$ 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

Muna samun hoton girman 363MB.
Za mu yi mafi kyau tare da Alpine? Mu gwada:

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

Menene ke gudana?

Alpine baya goyan bayan ƙafafun

Idan kun kalli ginin, wanda ya dogara akan Debian, zaku ga cewa yana zazzage matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.wlh.

Wannan binary ne don dabaran. Alpine yana zazzage tushen 'matplotlib-3.1.2.tar.gz`tunda baya goyan bayan mizani ƙafafun.

Me yasa? Yawancin rarrabawar Linux suna amfani da nau'in GNU (glibc) na babban ɗakin karatu na C, wanda a zahiri ake buƙata ta kowane shirin da aka rubuta a cikin C, gami da Python. Amma Alpine yana amfani da 'musl', kuma tunda waɗannan binaries an tsara su don 'glibc', ba kawai zaɓi bane.

Don haka, idan kuna amfani da Alpine, kuna buƙatar tattara duk lambar da aka rubuta a cikin C a cikin kowane kunshin Python.

Oh, eh, dole ne ku nemi jerin duk irin waɗannan abubuwan dogaro waɗanda ke buƙatar haɗawa da kanku.
A wannan yanayin muna samun wannan:

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

Kuma lokacin ginawa yana ɗaukar ...

... Minti 25 da dakika 57! Kuma girman hoton shine 851MB.

Hotunan da ke tushen tsaunuka suna ɗaukar tsayi da yawa don ginawa, sun fi girma girma, kuma har yanzu kuna buƙatar neman duk abin dogaro. Kuna iya ba shakka rage girman taro ta amfani da Multi-mataki ginawa amma hakan yana nufin a kara yin aiki.

Ba haka bane!

Alpine na iya haifar da kurakurai da ba a zata ba a lokacin aiki

Tabbas an riga an gyara waɗannan kurakurai, amma wa ya san adadin nawa za a samu.

Kar a yi amfani da hotunan Alpine don Python

Idan ba ku so ku damu da manyan gine-gine masu tsayi, neman abubuwan dogaro da kurakurai masu yuwuwa, kar ku yi amfani da Alpine Linux azaman hoton tushe. Zaɓin hoto mai kyau na tushe.

source: www.habr.com

Add a comment