рдЕрд▓реНрдкрд╛рдЗрдирд▓реЗ рдкрд╛рдЗрдердирдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░рд▓реЗ релреж рдЧреБрдгрд╛ рдврд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ, рд░ рдЫрд╡рд┐рд╣рд░реВ реи рдЧреБрдгрд╛ рднрд╛рд░реА рдЫрдиреН

рдЕрд▓реНрдкрд╛рдЗрдирд▓реЗ рдкрд╛рдЗрдердирдХреЛ рд▓рд╛рдЧрд┐ рдбрдХрд░рд▓реЗ релреж рдЧреБрдгрд╛ рдврд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ, рд░ рдЫрд╡рд┐рд╣рд░реВ реи рдЧреБрдгрд╛ рднрд╛рд░реА рдЫрдиреН

рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╛рдп: рдбрдХрд░рдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░ рдЫрд╡рд┐рдХреЛ рд░реВрдкрдорд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рддрдкрд╛рдИрдВрд▓рд╛рдИ рднрдирд┐рдПрдХреЛ рдЫ рдХрд┐ рдЕрд▓реНрдкрд╛рдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдИрдВрдХреЛ рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ рд╕рд╛рдирд╛ рдмрдирд╛рдЙрдБрджрдЫ рд░ рддрдкрд╛рдИрдВрдХреЛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрдБрджрдЫред

рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдкрд╛рдЗрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ:

  • рддрдкрд╛рдИрдВрдХреЛ рдирд┐рд░реНрдорд╛рдг рдзреЗрд░реИ рд╕реБрд╕реНрдд рдмрдирд╛рдЙрдБрдЫ
  • рддрдкрд╛рдИрдВрдХреЛ рдЫрд╡рд┐рд╣рд░реВ рдареВрд▓реЛ рдмрдирд╛рдЙрдБрдЫ
  • рдЖрдлреНрдиреЛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрджреИ
  • рд░ рдЕрдиреНрддрдорд╛ рдпрд╕рд▓реЗ рд░рдирдЯрд╛рдЗрдордорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫ


рдЕрд▓реНрдкрд╛рдЗрди рдХрд┐рди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫ рд╣реЗрд░реМрдВ, рддрд░ рдХрд┐рди рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдпрд╕рд▓рд╛рдИ рдкрд╛рдЗрдердирд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реБрдБрджреИрдиред

рдорд╛рдирд┐рд╕рд╣рд░реВ рдХрд┐рди рдЕрд▓реНрдкрд╛рдЗрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫрдиреН?

рдорд╛рдиреМрдВ рдХрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдЫрд╡рд┐рдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ gcc рдЪрд╛рд╣рд┐рдиреНрдЫ рд░ рд╣рд╛рдореА рдирд┐рд░реНрдорд╛рдг рдЧрддрд┐ рд░ рдЕрдиреНрддрд┐рдо рдЫрд╡рд┐ рдЖрдХрд╛рд░рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдмрдирд╛рдо 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

рд╣рд╛рдореА рдЕрд▓реНрдкрд╛рдЗрди (рдбрдХрд░рдлрд╛рдЗрд▓) рдХреЛ рд▓рд╛рдЧреА рдЙрд╣реА рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрдЫ:

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

рд░ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рд▓рд╛рдЧреНрдЫ ...

... реирел рдорд┐рдиреЗрдЯ релрен рд╕реЗрдХреЗрдиреНрдб! рд░ рдЫрд╡рд┐ рдЖрдХрд╛рд░ 25MB рдЫред

рдЕрд▓реНрдкрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрдЫ, рддрд┐рдиреАрд╣рд░реВ рдЖрдХрд╛рд░рдорд╛ рдареВрд▓рд╛ рд╣реБрдиреНрдЫрдиреН, рд░ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рд╕рдмреИ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рдЦреЛрдЬреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрдкрд╛рдЗрдБ рдкрдХреНрдХреИ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрдХрд╛рд░ рдХрдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдмрд╣реБ-рдЪрд░рдг рдирд┐рд░реНрдорд╛рдг рддрд░ рдпрд╕рдХреЛ рдорддрд▓рдм рдЕрдЭреИ рдзреЗрд░реИ рдХрд╛рдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдпрддрд┐ рдорд╛рддреНрд░ рд╣реИрди!

рдЕрд▓реНрдкрд╛рдЗрдирд▓реЗ рд░рдирдЯрд╛рдЗрдордорд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдмрдЧрд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫ

  • рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, musl glibc рд╕рдБрдЧ рдорд┐рд▓реНрджреЛ рдЫ, рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рднрд┐рдиреНрдирддрд╛рд╣рд░реВрд▓реЗ рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫред рд░ рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдЫрдиреН рднрдиреЗ, рддрд┐рдиреАрд╣рд░реВ рд╕рдореНрднрд╡рддрдГ рдЕрдкреНрд░рд┐рдп рд╣реБрдиреЗрдЫрдиреНред рдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди рдЙрддреНрдкрдиреНрди рд╣реБрди рд╕рдХреНрдЫ:
  • рдЕрд▓реНрдкрд╛рдЗрдирд╕рдБрдЧ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рд╛рдиреЛ рдереНрд░реЗрдб рд╕реНрдЯреНрдпрд╛рдХ рд╕рд╛рдЗрдЬ рдЫ, рдЬрд╕рд▓реЗ рдиреЗрддреГрддреНрд╡ рдЧрд░реНрди рд╕рдХреНрдЫ Python рдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ
  • рдХреЗрд╣реА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдпреЛ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрдХрд╛ рдЫрдиреН рдкрд╛рдЗрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдврд┐рд▓реЛ рдЫрдиреН рдореБрд╕рд▓рд▓реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛рдХреЛ рдХрд╛рд░рдгрд▓реЗ (glibc рднрдиреНрджрд╛ рдлрд░рдХ)ред
  • рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдордзреНрдпреЗ рдПрдХ рдорд┐рддрд┐ рдврд╛рдБрдЪрд╛ рдЧрд░реНрджрд╛ рддреНрд░реБрдЯрд┐ рднреЗрдЯрд┐рдпреЛ

рдкрдХреНрдХреИ рдкрдирд┐ рдпреА рддреНрд░реБрдЯрд┐рд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рдЪреНрдпрд╛рдЗрд╕рдХреЗрдХрд╛ рдЫрдиреН, рддрд░ рдХрд╕рд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдЕрдЭреИ рдХрддрд┐ рд╣реБрдиреЗрдЫрдиреНред

рдкрд╛рдЗрдердирдХреЛ рд▓рд╛рдЧрд┐ рдЕрд▓реНрдкрд╛рдЗрди рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН

рдпрджрд┐ рддрдкрд╛рдИрдВ рдареВрд▓рд╛ рд░ рд▓рд╛рдореЛ рдирд┐рд░реНрдорд╛рдгрд╣рд░реВ, рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд░ рд╕рдореНрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рдЦреЛрдЬреАрдорд╛ рдкрд░реЗрд╢рд╛рди рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрди рднрдиреЗ, рдЖрдзрд╛рд░ рдЫрд╡рд┐рдХреЛ рд░реВрдкрдорд╛ рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред рд░рд╛рдореНрд░реЛ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдЫрдиреЛрдЯ рдЧрд░реНрджреИ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди