เจเจฒเจชเจพเจˆเจจ เจ•เฉฐเจชเจพเจˆเจฒ เจกเฉŒเจ•เจฐ เจชเจพเจ‡เจฅเจจ เจฒเจˆ 50 เจ—เฉเจฃเจพ เจนเฉŒเจฒเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจšเจฟเฉฑเจคเจฐ 2 เจ—เฉเจฃเจพ เจญเจพเจฐเฉ€ เจนเจจ

เจเจฒเจชเจพเจˆเจจ เจ•เฉฐเจชเจพเจˆเจฒ เจกเฉŒเจ•เจฐ เจชเจพเจ‡เจฅเจจ เจฒเจˆ 50 เจ—เฉเจฃเจพ เจนเฉŒเจฒเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจšเจฟเฉฑเจคเจฐ 2 เจ—เฉเจฃเจพ เจญเจพเจฐเฉ€ เจนเจจ

เจ…เจฒเจชเจพเจˆเจจ เจฒเฉ€เจจเจ•เจธ เจฆเฉ€ เจ…เจ•เจธเจฐ เจกเฉŒเจ•เจฐ เจฒเจˆ เจ‡เฉฑเจ• เจฌเฉ‡เจธ เจšเจฟเฉฑเจคเจฐ เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจ•เจฟ เจเจฒเจชเจพเจˆเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจพเจฒ เจคเฉเจนเจพเจกเฉ‡ เจฌเจฟเจฒเจก เจ›เฉ‹เจŸเฉ‡ เจนเฉ‹เจฃเจ—เฉ‡ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจฌเจฟเจฒเจก เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจคเฉ‡เจœเจผ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจชเจพเจˆเจฅเจจ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจเจฒเจชเจพเจˆเจจ เจฒเฉ€เจจเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เจน:

  • เจคเฉเจนเจพเจกเฉ‡ เจจเจฟเจฐเจฎเจพเจฃ เจจเฉ‚เฉฐ เจฌเจนเฉเจค เจนเฉŒเจฒเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ
  • เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจคเจธเจตเฉ€เจฐเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจกเจพ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ
  • เจ†เจชเจฃเจพ เจธเจฎเจพเจ‚ เจฌเจฐเจฌเจพเจฆ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ
  • เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ‡เจน เจฐเจจเจŸเจพเจˆเจฎ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃ เจธเจ•เจฆเจพ เจนเฉˆ


เจ†เจ“ เจฆเฉ‡เจ–เฉ€เจ เจ•เจฟ เจเจฒเจชเจพเจˆเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจ•เจฟเจ‰เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจชเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเฉ‡ เจตเฉ€ เจชเจพเจˆเจฅเจจ เจจเจพเจฒ เจ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจ‰เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€เฅค

เจฒเฉ‹เจ• เจเจฒเจชเจพเจˆเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจ•เจฟเจ‰เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ?

เจšเจฒเฉ‹ เจ‡เจน เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจšเจฟเฉฑเจคเจฐ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ 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` เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจธเจŸเฉˆเจ‚เจกเจฐเจก เจฆเจพ เจธเจฎเจฐเจฅเจจ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ เจชเจนเฉ€เจ.

เจ•เจฟเจ‰เจ‚? เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจฒเฉ€เจจเจ•เจธ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจธเจผเจจ C เจธเจŸเฉˆเจ‚เจกเจฐเจก เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ‡ GNU เจธเฉฐเจธเจ•เจฐเจฃ (glibc) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจœเฉ‹ เจ…เจธเจฒ เจตเจฟเฉฑเจš C เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจนเจฐเฉ‡เจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจนเฉˆ, เจชเจพเจˆเจฅเจจ เจธเจฎเฉ‡เจคเฅค เจชเจฐ เจ…เจฒเจชเจพเจˆเจจ `musl` เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจน เจฌเจพเจˆเจจเจฐเฉ€เจ†เจ‚ `glibc` เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ, เจ‰เจน เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจจเจนเฉ€เจ‚ เจนเจจเฅค

เจ‡เจธ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจเจฒเจชเจพเจˆเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเจฐเฉ‡เจ• เจชเจพเจˆเจฅเจจ เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš 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 เจนเฉˆเฅค

เจเจฒเจชเจพเจˆเจจ-เจ…เจงเจพเจฐเจฟเจค เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆ, เจ‰เจน เจ†เจ•เจพเจฐ เจตเจฟเฉฑเจš เจตเฉฑเจกเฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจœเฉ‡ เจตเฉ€ เจธเจพเจฐเฉ€เจ†เจ‚ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจœเจผเจฐเฉ‚เจฐ เจตเจฐเจค เจ•เฉ‡ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฆเจพ เจ†เจ•เจพเจฐ เจ˜เจŸเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจฌเจนเฉ-เจชเฉœเจพเจ… เจฆเจพ เจจเจฟเจฐเจฎเจพเจฃ เจชเจฐ เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจนเฉ‹เจฐ เจตเฉ€ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ‡เจน เจธเจญ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจนเฉˆ!

เจเจฒเจชเจพเจˆเจจ เจฐเจจเจŸเจพเจˆเจฎ เจตเจฟเฉฑเจš เจ…เจšเจพเจจเจ• เจฌเฉฑเจ— เจชเฉˆเจฆเจพ เจ•เจฐ เจธเจ•เจฆเฉ€ เจนเฉˆ

  • เจธเจฟเจงเจพเจ‚เจค เจตเจฟเฉฑเจš, musl glibc เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉˆ, เจชเจฐ เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจ…เจคเฉ‡ เจœเฉ‡ เจ‰เจน เจนเจจ, เจคเจพเจ‚ เจ‰เจน เจธเจผเจพเจ‡เจฆ เจ•เฉ‹เจเจพ เจนเฉ‹เจฃเจ—เฉ‡. เจ‡เฉฑเจฅเฉ‡ เจ•เฉเจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจ เจœเฉ‹ เจชเฉˆเจฆเจพ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ:
  • เจเจฒเจชเจพเจˆเจจ เจตเจฟเฉฑเจš เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจฅเจฐเจฟเฉฑเจก เจธเจŸเฉˆเจ• เจ†เจ•เจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจ‡เจน เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจชเจพเจˆเจฅเจจ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€เจ†เจ‚
  • เจ•เฉเจ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‡ เจ‡เจน เจชเจพเจ‡เจ† เจนเฉˆ เจชเจพเจˆเจฅเจจ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจนเฉŒเจฒเฉ€ เจนเจจ musl เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจฆเฉ‡ เจ•เจพเจฐเจจ (glibc เจคเฉ‹เจ‚ เจตเฉฑเจ–)เฅค
  • เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจซเจพเจฐเจฎเฉˆเจŸ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจ‡เฉฑเจ• เจ—เจฒเจคเฉ€ เจฎเจฟเจฒเฉ€

เจฏเจ•เฉ€เจจเจจ เจ‡เจน เจ—เจฒเจคเฉ€เจ†เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ เฉ€เจ• เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพ เจšเฉเฉฑเจ•เฉ€เจ†เจ‚ เจนเจจ, เจชเจฐ เจ•เฉŒเจฃ เจœเจพเจฃเจฆเจพ เจนเฉˆ เจ•เจฟ เจนเฉ‹เจฐ เจ•เจฟเฉฐเจจเฉ€เจ†เจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚เฅค

เจชเจพเจˆเจฅเจจ เจฒเจˆ เจเจฒเจชเจพเจˆเจจ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจพ เจ•เจฐเฉ‹

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจตเฉฑเจกเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจฒเฉฐเจฌเฉ€เจ†เจ‚ เจฌเจฟเจฒเจกเจพเจ‚ เจจเจพเจฒ เจชเจฐเฉ‡เจธเจผเจพเจจ เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡, เจจเจฟเจฐเจญเจฐเจคเจพ เจ…เจคเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจคเจฐเฉเจŸเฉ€เจ†เจ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ…เจฒเจชเจพเจˆเจจ เจฒเฉ€เจจเจ•เจธ เจจเฉ‚เฉฐ เจฌเฉ‡เจธ เจšเจฟเฉฑเจคเจฐ เจตเจœเฉ‹เจ‚ เจจเจพ เจตเจฐเจคเฉ‹เฅค เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจ†เจงเจพเจฐ เจšเจฟเฉฑเจคเจฐ เจšเฉเจฃเจจเจพ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹