ProHoster > 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
A ka'idar, musl ya dace da glibc, amma a aikace bambance-bambance na iya haifar da matsaloli da yawa. Kuma idan sun kasance, tabbas za su kasance marasa daɗi. Ga wasu matsalolin da ka iya faruwa:
Alpine yana da ƙaramin maɗaurin zaren ta tsohuwa, wanda zai iya kaiwa ga kurakurai a cikin Python
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.