เช†เชฒเซเชชเชพเช‡เชจ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‡ เช›เซ‡ เชกเซ‹เช•เชฐ เชชเชพเชฏเชฅเซ‹เชจ เชฎเชพเชŸเซ‡ 50 เช—เชฃเซ€ เชงเซ€เชฎเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เช›เชฌเซ€เช“ 2 เช—เชฃเซ€ เชญเชพเชฐเซ‡ เช›เซ‡

เช†เชฒเซเชชเชพเช‡เชจ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‡ เช›เซ‡ เชกเซ‹เช•เชฐ เชชเชพเชฏเชฅเซ‹เชจ เชฎเชพเชŸเซ‡ 50 เช—เชฃเซ€ เชงเซ€เชฎเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เช›เชฌเซ€เช“ 2 เช—เชฃเซ€ เชญเชพเชฐเซ‡ เช›เซ‡

Alpine Linux เชจเซ‡ เชกเซ‹เช•เชฐ เชฎเชพเชŸเซ‡ เชฌเซ‡เช เชˆเชฎเซ‡เชœ เชคเชฐเซ€เช•เซ‡ เชตเชพเชฐเช‚เชตเชพเชฐ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเชฎเชจเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เช†เชฒเซเชชเชพเช‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชก เชจเชพเชจเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชฌเชฟเชฒเซเชก เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชเชกเชชเซ€ เชฌเชจเชถเซ‡.

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เช†เชฒเซเชชเชพเช‡เชจ เชฒเชฟเชจเช•เซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเซ‡:

  • เชคเชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชกเซเชธเชจเซ‡ เช–เซ‚เชฌ เชงเซ€เชฎเซเช‚ เชฌเชจเชพเชตเซ‡ เช›เซ‡
  • เชคเชฎเชพเชฐเซ€ เช›เชฌเซ€เช“เชจเซ‡ เชฎเซ‹เชŸเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡
  • เชคเชฎเชพเชฐเซ‹ เชธเชฎเชฏ เชฌเช—เชพเชกเชตเซ‹
  • เช…เชจเซ‡ เช…เช‚เชคเซ‡ เชคเซ‡ เชฐเชจเชŸเชพเช‡เชฎเชฎเชพเช‚ เชญเซ‚เชฒเซ‹เชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡


เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เช†เชฒเซเชชเชพเชˆเชจเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฐเซ‡ เชนเชœเซ เชชเชฃ เชชเชพเชฏเชฅเซ‹เชจ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชฎ เชจ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช.

เชถเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เช•เซ‹ เช†เชฒเซเชชเชพเช‡เชจเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡?

เชšเชพเชฒเซ‹ เชงเชพเชฐเซ€เช เช•เซ‡ เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเซ€ เช›เชฌเซ€เชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ gcc เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ เชฌเชฟเชฒเซเชก เชธเซเชชเซ€เชก เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เช›เชฌเซ€ เช•เชฆเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เช…เชฒเซเชชเชพเช‡เชจ เชฒเชฟเชจเช•เซเชธ เชตเชฟ เช‰เชฌเซเชจเซเชŸเซ 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 เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เช…เชจเซ‡ เช‰เชฌเซเชจเซเชŸเซ เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช:

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/*

เชธเช‚เชชเซ‚เชฐเซเชฃ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชฒเช–เชตเซเช‚ เช เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช—เชคเชฟเชจเซ‡ เชฎเชพเชชเซ€เช:

$ 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

เช…เชฎเซ‡ เช†เชฒเซเชชเชพเช‡เชจ (เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ) เชฎเชพเชŸเซ‡ เชคเซ‡ เชœ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเซ€เช เช›เซ€เช:

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 เช›เซ‡. เชคเซ‡ เช–เซ‚เชฌ เชธเชพเชฐเซเช‚ เช›เซ‡!

เชชเชฐเช‚เชคเซ เชœเซ‹ เช†เชชเชฃเซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€เช, เชคเซ‹ เชฌเชงเซเช‚ เชเชŸเชฒเซเช‚ เชฐเซ‹เชเซ€ เชจเชฅเซ€.

เชชเชพเชฏเชฅเซ‹เชจ เช›เชฌเซ€

เชชเชพเชฏเชฅเซ‹เชจ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เช˜เชฃเซ€เชตเชพเชฐ เชชเชพเช‚เชกเชพ เช…เชจเซ‡ เชฎเซ‡เชŸเชชเซเชฒเซ‹เชŸเชฒเชฟเชฌเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, เช† เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชกเซ‡เชฌเชฟเชฏเชจ-เช†เชงเชพเชฐเชฟเชค เช›เชฌเซ€ เชฒเซ‡เชตเชพเชจเซ‹ เชเช• เชตเชฟเช•เชฒเซเชช เช›เซ‡:

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

เชถเซเช‚ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡?

เช†เชฒเซเชชเชพเช‡เชจ เชตเซเชนเซ€เชฒเซเชธเชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเชคเซเช‚ เชจเชฅเซ€

เชœเซ‹ เชคเชฎเซ‡ เชฌเชฟเชฒเซเชก เชœเซเช“ เช›เซ‹, เชœเซ‡ เชกเซ‡เชฌเชฟเชฏเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡, เชคเซ‹ เชคเชฎเซ‡ เชœเซ‹เชถเซ‹ เช•เซ‡ เชคเซ‡ matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64 เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡ เช›เซ‡.whl.

เช† เชšเช•เซเชฐ เชฎเชพเชŸเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เช›เซ‡. เช†เชฒเซเชชเชพเช‡เชจ เชธเซเชคเซเชฐเซ‹เชค `matplotlib-3.1.2.tar เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡ เช›เซ‡.gz` เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชงเซ‹เชฐเชฃเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเชคเซเช‚ เชจเชฅเซ€ เชตเซเชนเซ€เชฒเซเชธ.

เชถเชพ เชฎเชพเชŸเซ‡? เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ Linux เชตเชฟเชคเชฐเชฃเซ‹ C เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเชพ GNU เชธเช‚เชธเซเช•เชฐเชฃ (glibc) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชนเช•เซ€เช•เชคเชฎเชพเช‚ Python เชธเชนเชฟเชค C เชฎเชพเช‚ เชฒเช–เซ‡เชฒเชพ เชฆเชฐเซ‡เช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชชเชฐเช‚เชคเซ เช†เชฒเซเชชเชพเช‡เชจ `musl` เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชฆเซเชตเชฟเชธเช‚เช—เซ€ `glibc` เชฎเชพเชŸเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเซ‹เชตเชพเชฅเซ€, เชคเซ‡ เชเช• เชตเชฟเช•เชฒเซเชช เชจเชฅเซ€.

เชคเซ‡เชฅเซ€, เชœเซ‹ เชคเชฎเซ‡ เช†เชฒเซเชชเชพเชˆเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชฆเชฐเซ‡เช• Python เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚ 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 เชธเซ‡เช•เชจเซเชก! เช…เชจเซ‡ เช‡เชฎเซ‡เชœ เชธเชพเชˆเช 851MB เช›เซ‡.

เช†เชฒเซเชชเชพเช‡เชจ-เช†เชงเชพเชฐเชฟเชค เช›เชฌเซ€เช“ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡, เชคเซ‡ เช•เชฆเชฎเชพเช‚ เชฎเซ‹เชŸเซ€ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชนเชœเซ เชชเชฃ เชคเชฎเชพเชฎ เช…เชตเชฒเช‚เชฌเชจ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเชฎเซ‡ เช…เชฒเชฌเชคเซเชค เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช•เชฆ เช˜เชŸเชพเชกเซ€ เชถเช•เซ‹ เช›เซ‹ เชฎเชฒเซเชŸเซ€-เชธเซเชŸเซ‡เชœ เชฌเชฟเชฒเซเชกเซเชธ เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เช•เซ‡ เชนเชœเซ เชตเชงเซ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชเชŸเชฒเซเช‚ เชœ เชจเชนเซ€เช‚!

เช†เชฒเซเชชเชพเช‡เชจ เชฐเชจเชŸเชพเช‡เชฎเชฎเชพเช‚ เช…เชฃเชงเชพเชฐเซ€ เชญเซ‚เชฒเซ‹เชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡

  • เชธเชฟเชฆเซเชงเชพเช‚เชคเชฎเชพเช‚, เชฎเซเชธเชฒ glibc เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชคเชซเชพเชตเชคเซ‹ เช˜เชฃเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡. เช…เชจเซ‡ เชœเซ‹ เชคเซ‡เช“ เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡เช“ เช•เชฆเชพเชš เช…เชชเซเชฐเชฟเชฏ เชนเชถเซ‡. เช…เชนเซ€เช‚ เช•เซ‡เชŸเชฒเซ€เช• เชธเชฎเชธเซเชฏเชพเช“ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡:
  • เช†เชฒเซเชชเชพเช‡เชจเชฎเชพเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชจเชพเชจเชพ เชฅเซเชฐเซ‡เชก เชธเซเชŸเซ‡เช•เชจเซเช‚ เช•เชฆ เชนเซ‹เชฏ เช›เซ‡, เชœเซ‡ เชชเชฐเชฟเชฃเชฎเซ€ เชถเช•เซ‡ เช›เซ‡ Python เชฎเชพเช‚ เชญเซ‚เชฒเซ‹
  • เช•เซ‡เชŸเชฒเชพเช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เช เชคเซ‡ เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเซเช‚ เช›เซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชงเซ€เชฎเซ€ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชœเซ‡ เชฐเซ€เชคเซ‡ musl เชฎเซ‡เชฎเชฐเซ€ เชซเชพเชณเชตเซ‡ เช›เซ‡ (glibc เชฅเซ€ เช…เชฒเช—).
  • เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชฎเชพเช‚เชฅเซ€ เชเช• เชคเชพเชฐเซ€เช– เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชญเซ‚เชฒ เชฎเชณเซ€

เชšเซ‹เช•เซเช•เชธ เช† เชญเซ‚เชฒเซ‹ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชธเซเชงเชพเชฐเซ€ เชฆเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‹เชฃ เชœเชพเชฃเซ‡ เช•เซ‡เชŸเชฒเซ€ เชตเชงเซ เชนเชถเซ‡.

เชชเชพเชฏเชฅเซ‹เชจ เชฎเชพเชŸเซ‡ เช†เชฒเซเชชเชพเชˆเชจ เชˆเชฎเซ‡เชœเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚

เชœเซ‹ เชคเชฎเซ‡ เชฎเซ‹เชŸเชพ เช…เชจเซ‡ เชฒเชพเช‚เชฌเชพ เชฌเชฟเชฒเซเชกเซเชธ, เชจเชฟเชฐเซเชญเชฐเชคเชพ เช…เชจเซ‡ เชธเช‚เชญเชตเชฟเชค เชญเซ‚เชฒเซ‹เชจเซ€ เชถเซ‹เชงเชฎเชพเช‚ เชชเชฐเซ‡เชถเชพเชจ เชจ เชฅเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เช†เชฒเซเชชเชพเช‡เชจ เชฒเชฟเชจเช•เซเชธเชจเซ‹ เชฌเซ‡เช เช‡เชฎเซ‡เชœ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚. เชธเชพเชฐเซ€ เช†เชงเชพเชฐ เช›เชฌเซ€ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹