рдЕрд▓реНрдкрд╛рдЗрди рдиреЗ рдбреЙрдХрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкрд╛рдпрдерди 50 рдмрд╛рд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЪрд┐рддреНрд░ 2 рдЧреБрдирд╛ рднрд╛рд░реА рд╣реИрдВ



рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдХреЛ рдЕрдХреНрд╕рд░ рдбреЙрдХрд░ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд▓реНрдкрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рдЫреЛрдЯреЗ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреЗрдЬреА рд╕реЗ рд╣реЛрдЧреАред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкрд╛рдпрдерди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣:

  • рдЖрдкрдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ
  • рдЖрдкрдХреЗ рд▓реБрдХ рдХреЛ рдмрдбрд╝рд╛ рдмрдирд╛рддрд╛ рд╣реИ
  • рд╡рдХреНрдд рдмрд░реНрдмрд╛рдж рдХрд░рдирд╛
  • рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ

рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЕрд▓реНрдкрд╛рдЗрди рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЛрдЧ рдЕрд▓реНрдкрд╛рдЗрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?


рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рдЫрд╡рд┐ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ 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/*

рд╕рд╣реА рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред

рдЪрд▓реЛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЧрддрд┐ рдХреЛ рдорд╛рдкрдиреЗ:

$ 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

рдЕрд▓реНрдкрд╛рдЗрди (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

рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд▓реНрдкрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐рдпрд╛рдВ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рддреЗрдЬ рдФрд░ рдХрдо рдЗрдХрдЯреНрдард╛ рд╣реЛрддреА рд╣реИрдВ: 30 рдХреЗ рдмрдЬрд╛рдп 15 рд╕реЗрдХрдВрдб рдФрд░ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ 105 рдПрдордмреА рдмрдирд╛рдо 150 рдПрдордмреАред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдПрдХ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд░рд╕реАрд▓рд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдЬрдЧрд░ рдХреА рдЫрд╡рд┐


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

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('"'"'\r\n'"'"', '"'"'\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 `, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдирдХ рдкрд╣рд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред

рдХреНрдпреЛрдВ? рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рд╕реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ GNU рд╕рдВрд╕реНрдХрд░рдг (рдЧреНрд▓рд┐рдмрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдпрдерди рд╕рд╣рд┐рдд рд╣рд░ рд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрд▓реНрдкрд╛рдЗрди `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 рд╣реИред

рдЕрд▓реНрдкрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рд╣реИрдВ, рд╡реЗ рд╕реНрд╡рдпрдВ рдмрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдмреЗрд╢рдХ рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рд▓реНрдб рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд╣ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВ!

рдЕрд▓реНрдкрд╛рдЗрди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░рдирдЯрд╛рдЗрдо рдмрдЧ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ



рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рд╣реЛ рдЧрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдФрд░ рд╣реИрдВред

рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдкрд╛рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдк рдмрдбрд╝реЗ рдФрд░ рд▓рдВрдмреЗ рдмрд┐рд▓реНрдб, рдирд┐рд░реНрднрд░рддрд╛ рдЦреЛрдЬ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдмрдЧ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдПрдХ рдЕрдЪреНрдЫреА рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдЪреБрдирдирд╛ ред

Source: https://habr.com/ru/post/undefined/


All Articles