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
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ Π²Π΅ΡΠ΅Π½ΠΎ, ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Π°Π»ΠΏΡΠΊΠΎ ΠΏΠΎΡΠ΅ΠΊΠ»ΠΎ ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π°Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ ΠΈ ΡΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΈ: 15 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ Π½Π°ΠΌΠ΅ΡΡΠΎ 30, Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π΅ 105 MB Π½Π°ΡΠΏΡΠΎΡΠΈ 150 MB. Π’ΠΎΠ° Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΄ΠΎΠ±ΡΠΎ!
ΠΠΎ, Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»ΠΈΠΌΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° Python, ΡΠΎΠ³Π°Ρ ΡΓ¨ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ ΡΠΎΠ·ΠΎΠ²ΠΎ.
ΠΠ°ΡΡΠΎΠ½ ΡΠ»ΠΈΠΊΠ°
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Python ΡΠ΅ΡΡΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΠ°Π½Π΄ΠΈ ΠΈ matplotlib. ΠΠ°ΡΠΎΠ°, Π΅Π΄Π½Π° ΠΎΠΏΡΠΈΡΠ° Π΅ Π΄Π° ΡΠ° Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° Debian ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΎΠ²Π°Π° Dockerfile:
FROM python:3.8-slim
RUN pip install --no-cache-dir matplotlib pandas
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΡΠΎΠ±Π΅ΡΠ΅ΠΌΠ΅:
$ 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
ΠΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΡΠ»ΠΈΠΊΠ° ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΎΠ΄ 363 MB.
ΠΠ°Π»ΠΈ ΡΠ΅ Π½ΠΈ Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΡΠΎ Alpine? ΠΠ° ΠΏΡΠΎΠ±Π°ΠΌΠ΅:
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
Π¨ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°?
Alpine Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΡΠΊΠ°Π»Π°
ΠΠΊΠΎ ΡΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ°, ΠΊΠΎΡΠ° Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° Debian, ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΡΠ΅Π·Π΅ΠΌΠ° matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.Π΄ΠΎΠ΄Π΅ΠΊΠ°.
ΠΠ²Π° Π΅ Π±ΠΈΠ½Π°ΡΠ΅Π½ Π·Π° ΡΡΠΊΠ°Π»ΠΎ. Alpine Π³ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ° ΠΈΠ·Π²ΠΎΡΠΈΡΠ΅ `matplotlib-3.1.2.tar.gz` Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄
ΠΠΎΡΡΠΎ? ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π½Π° ΠΠΈΠ½ΡΠΊΡ ΡΠ° ΠΊΠΎΡΠΈΡΡΠ°Ρ GNU Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° (glibc) Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C, ΠΊΠΎΡΠ° Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ° Π±Π°ΡΠ° ΡΠ΅ΠΊΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ C, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈ Python. ΠΠΎ, Alpine ΠΊΠΎΡΠΈΡΡΠΈ βmuslβ, ΠΈ Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΈΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ΠΈ Π·Π° βglibcβ, ΡΠΈΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΡΠ΅ ΠΎΠΏΡΠΈΡΠ°.
ΠΠ°ΡΠΎΠ°, Π°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Alpine, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ Π²ΠΎ C Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΠΠ°ΡΡΠΎΠ½ ΠΏΠ°ΠΊΠ΅Ρ.
Π, Π΄Π°, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π±Π°ΡΠ°ΡΠ΅ Π»ΠΈΡΡΠ°ΡΠ° Π½Π° ΡΠΈΡΠ΅ ΡΠ°ΠΊΠ²ΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΡΡΠΎ ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΈ Π΄Π° Π³ΠΈ ΡΠΎΡΡΠ°Π²ΠΈΡΠ΅.
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΎΠ²Π°:
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 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ! Π Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π΅ 851 MB.
Π‘Π»ΠΈΠΊΠΈΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° Π°Π»ΠΏΠΈΠ½Π·ΠΈΡΠ΅ Π±Π°ΡΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄Π°Ρ, ΡΠΈΠ΅ ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ ΡΓ¨ ΡΡΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π±Π°ΡΠ°ΡΠ΅ ΡΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ
Π’ΠΎΠ° Π½Π΅ Π΅ ΡΠ΅!
Alpine ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π½Π΅ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ°Π΅ΡΠ΅
- ΠΠΎ ΡΠ΅ΠΎΡΠΈΡΠ°, musl Π΅ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠΎ glibc, Π½ΠΎ Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π Π°ΠΊΠΎ ΡΠ΅, Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΈ. ΠΠ²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²Π°Ρ:
- Alpine ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΈΠΌΠ° ΠΏΠΎΠΌΠ°Π»Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΎΡΠ°ΠΊΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ
Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ Python - ΠΠ΅ΠΊΠΎΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π³ΠΎ ΠΎΡΠΊΡΠΈΡΠ° ΡΠΎΠ°
ΠΠ°ΡΡΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ±Π°Π²Π½ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½ΠΎΡ Π½Π° ΠΊΠΎΡ musl ΡΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ° (ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΎΠ΄ glibc). - ΠΠ΄Π΅Π½ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅
Π½Π°ΡΠ΄Π΅ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π΄Π°ΡΡΠΌΠΎΡ
Π‘ΠΈΠ³ΡΡΠ½ΠΎ ΠΎΠ²ΠΈΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΡΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΈ, Π½ΠΎ ΠΊΠΎΡΠ·Π½Π°Π΅ ΡΡΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ ΠΈΠΌΠ°.
ΠΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π°Π»ΠΏΡΠΊΠΈ ΡΠ»ΠΈΠΊΠΈ Π·Π° Python
ΠΠΊΠΎ Π½Π΅ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΌΠ°ΡΠΈΡΠ΅ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ Π΄ΠΎΠ»Π³ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ°, Π΄Π° Π±Π°ΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Alpine Linux ΠΊΠ°ΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΠ»ΠΈΠΊΠ°.
ΠΠ·Π²ΠΎΡ: www.habr.com