Alpine ΡΡŠΠ±ΠΈΡ€Π° Docker Π±ΠΈΠ»Π΄ΠΎΠ²Π΅ ΠΏΠΎΠ΄ Python 50 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ са 2 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ

Alpine ΡΡŠΠ±ΠΈΡ€Π° Docker Π±ΠΈΠ»Π΄ΠΎΠ²Π΅ ΠΏΠΎΠ΄ Python 50 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ са 2 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ

Alpine Linux β€” чСсто ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Π½ ΠΊΠ°Ρ‚ΠΎ основСн ΠΎΠ±Ρ€Π°Π· Π·Π° Docker. ΠšΠ°Π·Π²Π°Ρ‚ Π²ΠΈ, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Alpine Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ Π±ΠΈΠ»Π΄ΠΎΠ²Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·.

Но Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Alpine Linux Π·Π° Python прилоТСния, Ρ‚ΠΎ Ρ‚ΠΎΠΉ:

  • ΠŸΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ Π±ΠΈΠ»Π΄ΠΎΠ²Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΈ
  • ΠŸΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ
  • ΠžΡ‚Π½Π΅ΠΌΠ° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅
  • И Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°


НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π·Π°Ρ‰ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ Alpine, Π½ΠΎ Π·Π°Ρ‰ΠΎ всС ΠΏΠ°ΠΊ Π½Π΅ трябва Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π·Π°Π΅Π΄Π½ΠΎ с Python.

Π—Π°Ρ‰ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ Alpine?

Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Π½ΠΈ трябва gcc ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ нашия ΠΎΠ±Ρ€Π°Π· ΠΈ искамС Π΄Π° сравним Alpine Linux с Ubuntu 18.04 ΠΏΠΎ скорост Π½Π° Π±ΠΈΠ»Π΄ ΠΈ ΠΊΡ€Π°Π΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΠΌ Π΄Π²Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π΄Π° сравним тСхния Ρ€Π°Π·ΠΌΠ΅Ρ€:

$ 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

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅, основният ΠΎΠ±Ρ€Π°Π· Π½Π° Alpine Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-малък. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° инсталирамС gcc ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с 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/*

НаписванСто Π½Π° идСалния Dockerfile ΠΈΠ·Π»ΠΈΠ·Π° извън Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π·ΠΈ статия

НСка ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ скоростта Π½Π° Π±ΠΈΠ»Π΄:

$ 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

ΠŸΠΎΠ²Ρ‚Π°Ρ€ΡΠΌΠ΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈ Π·Π° Alpine (Dockerfile):

FROM alpine
RUN apk add --update gcc

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅, Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°Ρ‚Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅:

$ 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

ΠšΠ°ΠΊΡ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Ρ…ΠΌΠ΅, ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Alpine сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° са ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ: 15 сСкунди вмСсто 30 ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° 105MB срСщу 150MB. Π’ΠΎΠ²Π° Π΅ доста Π΄ΠΎΠ±Ρ€Π΅!

Но Π°ΠΊΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅Ρ‰Π°Ρ‚Π° Π½Π΅ стоят Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€Π΅.

Python ΠΎΠ±Ρ€Π°Π·

Python прилоТСнията чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ pandas ΠΈ matplotlib. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈΡ‚Π΅ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ официалния ΠΎΠ±Ρ€Π°Π· Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Debian, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚Π°ΠΊΡŠΠ² Dockerfile:

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

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ Π³ΠΎ:

$ docker build -f Dockerfile.slim -t python-matpan.
Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π΄ΠΎ Docker Π΄Π΅ΠΌΠΎΠ½Π°  3.072kB
Π‘Ρ‚ΡŠΠΏΠΊΠ° 1/2 : FROM python:3.8-slim
 ---> 036ea1506a85
Π‘Ρ‚ΡŠΠΏΠΊΠ° 2/2 : RUN pip install --no-cache-dir matplotlib pandas
 ---> Изпълнява сС в 13739b2a0917
Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° matplotlib
  Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl (13.1 MB)
Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° pandas
  Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° pandas-0.25.3-cp38-cp38-manylinux1_x86_64.whl (10.4 MB)
...
УспСшно ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° b98b5dc06690
УспСшно ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π° python-matpan:latest

Ρ€Π΅Π°Π»Π½ΠΎ    0m30.297s
ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»    0m0.043s
систСма     0m0.020s

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π· с Ρ€Π°Π·ΠΌΠ΅Ρ€ 363MB.
Π©Π΅ Π½ΠΈ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π»ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ с Alpine? НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅:

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

$ docker build -t python-matpan-alpine -f Dockerfile.alpine .                                 
Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° контСкста Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π΄ΠΎ Docker Π΄Π΅ΠΌΠΎΠ½Π°  3.072kB                                               
Π‘Ρ‚ΡŠΠΏΠΊΠ° 1/2 : FROM python:3.8-alpine                                                             
 ---> a0ee0c90a0db                                                                            
Π‘Ρ‚ΡŠΠΏΠΊΠ° 2/2 : RUN pip install --no-cache-dir matplotlib pandas                                                  
 ---> Изпълнява сС в 6740adad3729                                                                 
Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° matplotlib                                                                         
  Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° matplotlib-3.1.2.tar.gz (40.9 MB)                                               
    Π“Π Π•Π¨ΠšΠ: ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ с ΠΊΠΎΠ΄ 1:                                            
     ΠΊΠΎΠΌΠ°Π½Π΄Π°: /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                              

...
Π“Π Π•Π¨ΠšΠ: ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ с ΠΊΠΎΠ΄ 1: python setup.py egg_info ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ‚Π΅ Π·Π° пълния ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°.
ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° '/bin/sh -c pip install matplotlib pandas' Π²ΡŠΡ€Π½Π° ΠΊΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Π½ΡƒΠ»Π°: 1

Какво става?

Alpine Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° wheels

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, основано Π½Π° Debian, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ Ρ‚ΠΎ изтСгля matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.whl.

Π’ΠΎΠ²Π° Π΅ Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„Π°ΠΉΠ» Π·Π° wheel. Alpine изтСгля ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ `matplotlib-3.1.2.tar.gz`, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° стандартния wheels.

Π—Π°Ρ‰ΠΎ? ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Linux дистрибуции ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ GNU вСрсия (glibc) Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C, която Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° всяка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, написана Π½Π° C, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Python. Но Alpine ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° `musl`, Π° Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° `glibc`, Ρ‚Π΅ просто Π½Π΅ са опция.

Π—Π°Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Alpine, Ρ‰Π΅ трябва Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ цСлия ΠΊΠΎΠ΄, написан Π½Π° C, Π·Π° всСки Python ΠΏΠ°ΠΊΠ΅Ρ‚.

Ах, Π΄Π°, ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π° всички Ρ‚Π°ΠΊΠΈΠ²Π° зависимости, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚, Ρ‰Π΅ трябва Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ сами.
Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСдното:

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

И Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΅...

… 25 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ 57 сСкунди! А Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° Π΅ 851MB.

ΠžΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Alpine сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-дълго, самитС Ρ‚Π΅ са с ΠΏΠΎ-голям Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π²ΠΈΠ΅ трябва Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ всички зависимости. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° сглобяванСто, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ многопластови изграТдания Π½ΠΎ Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°.

Π’ΠΎΠ²Π° Π½Π΅ Π΅ всичко!

Alpine ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π° Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС

  • Π’ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅Π½ ΠΏΠ»Π°Π½ musl Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌ с glibc, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° различията ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° причинят ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. И Π°ΠΊΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚, вСроятно Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ нСприятни. Π•Ρ‚ΠΎ някои ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС появят:
  • Alpine ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠΌΠ° ΠΏΠΎ-малък Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° стСка Π½Π° Π½ΠΈΡˆΠΊΠ°Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² Python
  • Някои ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΡ…Π°, Ρ‡Π΅ Python прилоТСнията работят ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ musl разпрСдСля ΠΏΠ°ΠΌΠ΅Ρ‚ (Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° сС ΠΎΡ‚ glibc).
  • Π•Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΡ…Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚Π°

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ Ρ‚Π΅Π·ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π²Π΅Ρ‡Π΅ са ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ, Π½ΠΎ ΠΊΠΎΠΉ Π·Π½Π°Π΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ‰Π΅ ΠΈΠΌΠ°.

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ Alpine Π·Π° Python

Ако Π½Π΅ искатС Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚Π΅ с Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ дълги изграТдания, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° зависимости ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ β€” Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Alpine Linux ΠΊΠ°Ρ‚ΠΎ Π±Π°Π·ΠΎΠ² ΠΎΠ±Ρ€Π°Π·. Π˜Π·Π±ΠΎΡ€ Π½Π° Π΄ΠΎΠ±Ρ€ΠΎ Π±Π°Π·ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster