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.
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
ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅Ρ 363MB.
ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Ρ 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.whl.
Π’ΠΎΠ²Π° Π΅ Π΄Π²ΠΎΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ» Π·Π° ΠΊΠΎΠ»Π΅Π»ΠΎ. Alpine ΠΈΠ·ΡΠ΅Π³Π»Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅ `matplotlib-3.1.2.tar.gz` ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ°
ΠΠ°ΡΠΎ? ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ 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 ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΡΠΈΠ½ΠΈ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
- ΠΠ° ΡΠ΅ΠΎΡΠΈΡ musl Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ glibc, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΈΡΠΈΠ½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π Π°ΠΊΠΎ ΡΠ°, ΡΠΎΠ³Π°Π²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ° Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΈ. ΠΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ:
- Alpine ΠΈΠΌΠ° ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΡΠ΅ΠΊΠ° Π½Π° Π½ΠΈΡΠΊΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ
Π³ΡΠ΅ΡΠΊΠΈ Π² Python - ΠΡΠΊΠΎΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ° ΠΎΡΠΊΡΠΈΠ»ΠΈ ΡΠΎΠ²Π°
Python ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ°Π±ΠΎΡΡΡ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ musl ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° (ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΎΡ glibc). - ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅
Π½Π°ΠΌΠ΅ΡΠΈ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΄Π°ΡΠ°ΡΠ°
Π‘ΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΡΠ΅Π·ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ΅ ΡΠ° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ, Π½ΠΎ ΠΊΠΎΠΉ Π·Π½Π°Π΅ ΠΎΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ.
ΠΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Alpine Π·Π° Python
ΠΠΊΠΎ Π½Π΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅ Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ Π΄ΡΠ»Π³ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ, ΡΡΡΡΠ΅ΠΉΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Alpine Linux ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com