āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻĄāĻ•āĻžāĻ° āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 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

āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨, āĻ†āĻ˛ā§āĻĒāĻžāĻ‡āĻ¨ā§‡āĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ›ā§‹āĻŸāĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻāĻ–āĻ¨ āĻœāĻŋāĻ¸āĻŋāĻ¸āĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻŦā§āĻ¨ā§āĻŸā§ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ:

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` āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻŽāĻžāĻ¨ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž āĻ•āĻžāĻ¯āĻŧāĻĻāĻž.

āĻ•ā§‡āĻ¨? āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ— āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ āĻ¸āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° GNU āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ (glibc) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ¯āĻž āĻ†āĻ¸āĻ˛ā§‡ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸āĻš āĻ¸āĻŋ-āĻ¤ā§‡ āĻ˛ā§‡āĻ–āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨ `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āĨ¤

āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻŦā§‡āĻļāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ¯āĻŧ, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ†āĻ•āĻžāĻ°ā§‡ āĻŦāĻĄāĻŧ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ–āĻ¨āĻ“ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻŽāĻžāĻŦā§‡āĻļā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻ•āĻŽāĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻŦāĻšā§-āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§‡āĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤

āĻāĻŸāĻžāĻ‡ āĻ¸āĻŦ āĻ¨āĻž!

āĻ†āĻ˛ā§āĻĒāĻžāĻ‡āĻ¨ āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽā§‡ āĻ…āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻŦāĻžāĻ— āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡

āĻ¨āĻŋāĻļā§āĻšāĻ¯āĻŧ āĻāĻ‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻ°āĻ“ āĻ•āĻ¤āĻ—ā§āĻ˛āĻŋ āĻĨāĻžāĻ•āĻŦā§‡ āĻ•ā§‡ āĻœāĻžāĻ¨ā§‡āĨ¤

āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨ āĻ›āĻŦāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻŦāĻĄāĻŧ āĻāĻŦāĻ‚ āĻĻā§€āĻ°ā§āĻ˜ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻŦāĻŋāĻ°āĻ•ā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ¨āĻž āĻšāĻžāĻ¨, āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨, āĻ¤āĻŦā§‡ āĻŦā§‡āĻ¸ āĻ‡āĻŽā§‡āĻœ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻŦā§‡āĻ¸ āĻ‡āĻŽā§‡āĻœ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨