Alpine ืžื”ื“ืจ ื‘ื•ื ื” Docker ืขื‘ื•ืจ Python ืคื™ 50 ืื™ื˜ื™ ื™ื•ืชืจ, ื•ื”ืชืžื•ื ื•ืช ื›ื‘ื“ื•ืช ืคื™ 2

Alpine ืžื”ื“ืจ ื‘ื•ื ื” Docker ืขื‘ื•ืจ Python ืคื™ 50 ืื™ื˜ื™ ื™ื•ืชืจ, ื•ื”ืชืžื•ื ื•ืช ื›ื‘ื“ื•ืช ืคื™ 2

Alpine Linux ืžื•ืžืœืฆืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืชืžื•ื ืช ื‘ืกื™ืก ืขื‘ื•ืจ Docker. ื ืืžืจ ืœืš ืฉืฉื™ืžื•ืฉ ื‘-Alpine ื™ื”ืคื•ืš ืืช ื”ื‘ื ื™ื™ื” ืฉืœืš ืœืงื˜ื ื” ื™ื•ืชืจ ื•ืืช ืชื”ืœื™ืš ื”ื‘ื ื™ื™ื” ืฉืœืš ืœืžื”ื™ืจ ื™ื•ืชืจ.

ืื‘ืœ ืื ืืชื” ืžืฉืชืžืฉ ื‘-Alpine Linux ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ Python, ืื– ื–ื”:

  • ื”ื•ืคืš ืืช ื”ื‘ื ื™ื™ื” ืฉืœืš ืœืื˜ ื”ืจื‘ื” ื™ื•ืชืจ
  • ื”ื•ืคืš ืืช ื”ืชืžื•ื ื•ืช ืฉืœืš ืœื’ื“ื•ืœื•ืช ื™ื•ืชืจ
  • ืžื‘ื–ื‘ื– ืืช ื”ื–ืžืŸ
  • ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื–ื” ื™ื›ื•ืœ ืœื’ืจื•ื ืœืฉื’ื™ืื•ืช ื‘ื–ืžืŸ ืจื™ืฆื”


ื”ื‘ื” ื ื‘ื—ืŸ ืžื“ื•ืข ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘-Alpine, ืืš ืžื“ื•ืข ืขื“ื™ื™ืŸ ืœื ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื• ืขื Python.

ืœืžื” ืื ืฉื™ื ืžืžืœื™ืฆื™ื ืขืœ ืืœืคื™ื™ืŸ?

ื‘ื•ืื• ื ื ื™ื— ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื gcc ื›ื—ืœืง ืžื”ืชืžื•ื ื” ืฉืœื ื• ื•ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืฉื•ื•ืช ืืช Alpine Linux ืœืขื•ืžืช 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 ื•ืœื”ืชื—ื™ืœ ืขื ืื•ื‘ื•ื ื˜ื•:

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

ืื ื• ื—ื•ื–ืจื™ื ืขืœ ืื•ืชื• ื”ื“ื‘ืจ ืขื‘ื•ืจ Alpine (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

ื›ืคื™ ืฉื”ื•ื‘ื˜ื—, ืชืžื•ื ื•ืช ืžื‘ื•ืกืกื•ืช ืืœืคื™ื ื™ ื ืืกืคื•ืช ืžื”ืจ ื™ื•ืชืจ ื•ื”ืŸ ืงื˜ื ื•ืช ื™ื•ืชืจ: 15 ืฉื ื™ื•ืช ื‘ืžืงื•ื 30 ื•ื’ื•ื“ืœ ื”ืชืžื•ื ื” ื”ื•ื 105MB ืœืขื•ืžืช 150MB. ื–ื” ื“ื™ ื˜ื•ื‘!

ืื‘ืœ ืื ื ืขื‘ื•ืจ ืœื‘ื ื™ื™ืช ืืคืœื™ืงืฆื™ื™ืช Python, ืื– ื”ื›ืœ ืœื ื›ืœ ื›ืš ื•ืจื•ื“.

ืชืžื•ื ืช ืคื™ื™ืชื•ืŸ

ื™ื™ืฉื•ืžื™ Python ืžืฉืชืžืฉื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืคื ื“ื•ืช ื•ื‘-matplotlib. ืœื›ืŸ, ืืคืฉืจื•ืช ืื—ืช ื”ื™ื ืœืงื—ืช ืืช ื”ืชืžื•ื ื” ื”ืจืฉืžื™ืช ืžื‘ื•ืกืกืช ื“ื‘ื™ืืŸ ื‘ืืžืฆืขื•ืช Dockerfile ื–ื”:

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

ืžื” ืงื•ืจื”?

ืืœืคื™ื™ืŸ ืื™ื ื• ืชื•ืžืš ื‘ื’ืœื’ืœื™ื

ืื ืชืกืชื›ืœ ืขืœ ื”-build, ื”ืžื‘ื•ืกืก ืขืœ ื“ื‘ื™ืืŸ, ืชืจืื” ืฉื”ื•ื ืžื•ืจื™ื“ ืืช matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.WHL.

ื–ื” ื‘ื™ื ืืจื™ ืœื’ืœื’ืœ. Alpine ืžื•ืจื™ื“ ืืช ื”ืžืงื•ืจื•ืช `matplotlib-3.1.2.tar.gz` ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืื™ื ื• ืชื•ืžืš ื‘ืชืงืŸ ื’ืœื’ืœื™ื.

ืœืžื”? ืจื•ื‘ ื”ื”ืคืฆื•ืช ืฉืœ ืœื™ื ื•ืงืก ืžืฉืชืžืฉื•ืช ื‘ื’ืจืกืช GNU (glibc) ืฉืœ ื”ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช C, ืฉืœืžืขืฉื” ื ื“ืจืฉืช ืœื›ืœ ืชื•ื›ื ื™ืช ืฉื ื›ืชื‘ืช ื‘-C, ื›ื•ืœืœ Python. ืื‘ืœ Alpine ืžืฉืชืžืฉ ื‘-'musl', ื•ืžื›ื™ื•ื•ืŸ ืฉื”ืงื‘ืฆื™ื ื”ื‘ื™ื ืืจื™ื™ื ื”ืืœื” ืžื™ื•ืขื“ื™ื ืœ'glibc', ื”ื ืคืฉื•ื˜ ืœื ืื•ืคืฆื™ื”.

ืœื›ืŸ, ืื ืืชื” ืžืฉืชืžืฉ ื‘-Alpine, ืืชื” ืฆืจื™ืš ืœืงืžืคืœ ืืช ื›ืœ ื”ืงื•ื“ ืฉื ื›ืชื‘ ื‘-C ื‘ื›ืœ ื—ื‘ื™ืœืช Python.

ืื”, ื›ืŸ, ืชืฆื˜ืจืš ืœื—ืคืฉ ืืช ื”ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืชืœื•ืช ืฉื›ืืœื• ืฉืฆืจื™ืš ืœื”ืจื›ื™ื‘ ื‘ืขืฆืžืš.
ื‘ืžืงืจื” ื–ื” ื ืงื‘ืœ ืืช ื–ื”:

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.

ืชืžื•ื ื•ืช ืžื‘ื•ืกืกื•ืช ืืœืคื™ื ื™ ืœื•ืงื—ื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ ืœื‘ื ื•ืช, ื”ืŸ ื’ื“ื•ืœื•ืช ื™ื•ืชืจ ื‘ื’ื•ื“ืœืŸ, ื•ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื—ืคืฉ ืืช ื›ืœ ื”ืชืœื•ืช. ื ื™ืชืŸ ื›ืžื•ื‘ืŸ ืœื”ืงื˜ื™ืŸ ืืช ื’ื•ื“ืœ ื”ื”ืจื›ื‘ื” ื‘ืืžืฆืขื•ืช ื‘ื ื™ื™ื” ืจื‘-ืฉืœื‘ื™ืช ืื‘ืœ ื–ื” ืื•ืžืจ ืฉืฆืจื™ืš ืœืขืฉื•ืช ืขื•ื“ ื™ื•ืชืจ ืขื‘ื•ื“ื”.

ื–ื” ืœื ื”ื›ืœ!

Alpine ืขืœื•ืœ ืœื’ืจื•ื ืœื‘ืื’ื™ื ื‘ืœืชื™ ืฆืคื•ื™ื™ื ื‘ื–ืžืŸ ืจื™ืฆื”

  • ื‘ืชื™ืื•ืจื™ื”, musl ืชื•ืื ืœ-glibc, ืืš ื‘ืคื•ืขืœ ื”ื”ื‘ื“ืœื™ื ื™ื›ื•ืœื™ื ืœื’ืจื•ื ืœื‘ืขื™ื•ืช ืจื‘ื•ืช. ื•ืื ื›ืŸ, ื›ื ืจืื” ืฉื”ื ื™ื”ื™ื• ืœื ื ืขื™ืžื™ื. ืœื”ืœืŸ ืžืกืคืจ ื‘ืขื™ื•ืช ืฉืขืœื•ืœื•ืช ืœื”ืชืจื—ืฉ:
  • ืœ-Alpine ื™ืฉ ื’ื•ื“ืœ ืขืจื™ืžืช ื—ื•ื˜ื™ื ืงื˜ืŸ ื™ื•ืชืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžื” ืฉื™ื›ื•ืœ ืœื”ื•ื‘ื™ืœ ืฉื’ื™ืื•ืช ื‘- Python
  • ื—ืœืง ืžื”ืžืฉืชืžืฉื™ื ืžืฆืื• ืืช ื–ื” ื™ื™ืฉื•ืžื™ Python ืื™ื˜ื™ื™ื ื™ื•ืชืจ ื‘ื’ืœืœ ื”ื“ืจืš ืฉื‘ื” musl ืžืงืฆื” ื–ื™ื›ืจื•ืŸ (ืฉื•ื ื” ืž-glibc).
  • ืื—ื“ ื”ืžืฉืชืžืฉื™ื ื ืžืฆื ืฉื’ื™ืื” ื‘ืขืช ืขื™ืฆื•ื‘ ื”ืชืืจื™ืš

ื•ื“ืื™ ืฉื’ื™ืื•ืช ืืœื• ื›ื‘ืจ ืชื•ืงื ื•, ืื‘ืœ ืžื™ ื™ื•ื“ืข ื›ืžื” ืขื•ื“ ื™ื”ื™ื•.

ืืœ ืชืฉืชืžืฉ ื‘ืชืžื•ื ื•ืช ืืœืคื™ื ื™ื•ืช ืขื‘ื•ืจ Python

ืื ืื™ื ืš ืจื•ืฆื” ืœื”ืชืขืกืง ื‘ื‘ื ื™ื™ื” ื’ื“ื•ืœื” ื•ืืจื•ื›ื”, ื‘ื—ื™ืคื•ืฉ ืื—ืจ ืชืœื•ืช ื•ืฉื’ื™ืื•ืช ืคื•ื˜ื ืฆื™ืืœื™ื•ืช, ืืœ ืชืฉืชืžืฉ ื‘-Alpine Linux ื›ืชืžื•ื ืช ื‘ืกื™ืก. ื‘ื—ื™ืจืช ืชืžื•ื ืช ื‘ืกื™ืก ื˜ื•ื‘ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”