Alpine αž…αž„αž€αŸ’αžšαž„ Docker build αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Python αž™αžΊαžαž‡αžΆαž„ 50 αžŠαž„ αž αžΎαž™αžšαžΌαž”αž—αžΆαž–αž‚αžΊαž’αŸ’αž„αž“αŸ‹αž‡αžΆαž„ 2 αžŠαž„

Alpine αž…αž„αž€αŸ’αžšαž„ Docker build αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Python αž™αžΊαžαž‡αžΆαž„ 50 αžŠαž„ αž αžΎαž™αžšαžΌαž”αž—αžΆαž–αž‚αžΊαž’αŸ’αž„αž“αŸ‹αž‡αžΆαž„ 2 αžŠαž„

αž›αžΈαž“αž»αž… Alpine αž‡αžΆαžšαžΏαž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Docker αŸ” αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹αžαžΆαž€αžΆαžšαž”αŸ’αžšαžΎ Alpine αž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžαžΌαž…αž‡αžΆαž„αž˜αž»αž“ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ Alpine Linux αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αž“αŸ„αŸ‡αžœαžΆαŸ–

  • αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž™αžΊαžαž‡αžΆαž„
  • αž’αŸ’αžœαžΎαž±αŸ’αž™αžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αžΆαž“αŸ‹αžαŸ‚αž’αŸ†
  • αžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž–αŸαž›αžœαŸαž›αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”
  • αž αžΎαž™αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆαž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš


αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž› Alpine αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ† αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αž˜αž·αž“αž‚αž½αžšαž”αŸ’αžšαžΎαžœαžΆαž‡αžΆαž˜αž½αž™ PythonαŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž˜αž“αž»αžŸαŸ’αžŸαžŽαŸ‚αž“αžΆαŸ†αž’αžΆαž›αŸ‹αž•αŸ‚αž“?

αž…αžΌαžšαžŸαž“αŸ’αž˜αžαžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš 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

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžΆαž›αŸ‹αž•αŸ‚αž“αž‚αžΊαžαžΌαž…αž‡αžΆαž„αž…αŸ’αžšαžΎαž“αŸ” αžαŸ„αŸ‡αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ†αž‘αžΎαž„ 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 αž αžΎαž™αž‘αŸ†αž αŸ†αžšαžΌαž”αž—αžΆαž–αž‚αžΊ 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 αŸ”
αžαžΎαž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž”αžΆαž“αž›αŸ’αž’αž‡αžΆαž„αž‡αžΆαž˜αž½αž™αž’αžΆαž›αŸ‹αž•αž·αž“αž‘αŸ? αžαŸ„αŸ‡β€‹αžŸαžΆαž€αž›αŸ’αž”αž„:

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 αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αž„αŸ‹αž‘αŸαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž› build αžŠαŸ‚αž›αž•αŸ’αž’αŸ‚αž€αž›αžΎ Debian αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžαžΆαžœαžΆαž‘αžΆαž‰αž™αž€ matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64αŸ”whl.

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž„αŸ‹αŸ” Alpine αž‘αžΆαž‰αž™αž€αž”αŸ’αžšαž—αž– `matplotlib-3.1.2.tar αŸ”gzαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžœαžΆαž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž€αž„αŸ‹.

αž αŸαžαž»αž’αŸ’αžœαžΈ? αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚ 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 αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž˜αžΆαž“ αž–αž½αž€αž‚αŸαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžŸαž”αŸ’αž”αžΆαž™αž…αž·αžαŸ’αžαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αŸ–
  • αž’αžΆαž›αŸ‹αž•αŸ‚αž“αž˜αžΆαž“αž‘αŸ†αž αŸ†αžαžΌαž…αž‡αžΆαž„αž”αžŽαŸ’αžαž»αŸ†αžαŸ’αžŸαŸ‚αžŸαŸ’αžšαž‘αžΆαž™αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαŸ‚αž›αž’αžΆαž…αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹ αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ Python
  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ„αŸ‡αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αž‚αžΊαž™αžΊαžαž‡αžΆαž„ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžœαž·αž’αžΈ musl αž”αŸ‚αž„αž…αŸ‚αž€αž€αžΆαžšαž…αž„αž…αžΆαŸ† (αžαž»αžŸαž–αžΈ glibc) αŸ”
  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹ αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αŸ†αž αž»αžŸαž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘

αž”αŸ’αžšαžΆαž€αžŠβ€‹αžŽαžΆαžŸαŸ‹β€‹αž€αŸ†αž αž»αžŸβ€‹αž‘αžΆαŸ†αž„β€‹αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž€αŸ‚β€‹αžšαž½αž…β€‹αž αžΎαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž’αŸ’αž“αž€β€‹αžŽαžΆβ€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž“αžΉαž„β€‹αž˜αžΆαž“β€‹αž…αŸ†αž“αž½αž“β€‹αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“β€‹αž‘αŸ€αžαŸ”

αž€αž»αŸ†αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– Alpine αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Python

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αžšαŸ†αžαžΆαž“αž‡αžΆαž˜αž½αž™αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž’αŸ† αž“αž·αž„αžœαŸ‚αž„ αžŸαŸ’αžœαŸ‚αž„αžšαž€αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž“αž·αž„αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“ αžŸαžΌαž˜αž€αž»αŸ†αž”αŸ’αžšαžΎ Alpine Linux αž‡αžΆαžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ” αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αŸ’αž’αŸ”.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹