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