Alpine составува Docker builds Π·Π° Python 50 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΠ±Π°Π²Π½ΠΎ, Π° сликитС сС 2 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΈ

Alpine составува Docker builds Π·Π° Python 50 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΠ±Π°Π²Π½ΠΎ, Π° сликитС сС 2 ΠΏΠ°Ρ‚ΠΈ ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΈ

Alpine Linux чСсто сС ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ основна слика Π·Π° Docker. Π’ΠΈ Π΅ ΠΊΠ°ΠΆΠ°Π½ΠΎ Π΄Π΅ΠΊΠ° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° Alpine ќС Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ Π³Ρ€Π°Π΄Π±ΠΈ ΠΏΠΎΠΌΠ°Π»ΠΈ ΠΈ Π²Π°ΡˆΠΈΠΎΡ‚ процСс Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ΠΏΠΎΠ±Ρ€Π·.

Но, Π°ΠΊΠΎ користитС Alpine Linux Π·Π° Python Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ Ρ‚ΠΎΠ°:

  • Π“ΠΈ ΠΏΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ Π³Ρ€Π°Π΄Π±ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ±Π°Π²Π½ΠΈ
  • Π“ΠΈ ΠΏΡ€Π°Π²ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ слики ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ
  • Π“ΡƒΠ±Π΅ΡšΠ΅ Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅
  • И Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Ρ‚Ρ€Π°Π΅ΡšΠ΅Ρ‚ΠΎ


АјдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π·ΠΎΡˆΡ‚ΠΎ сС ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π° Alpine, Π½ΠΎ Π·ΠΎΡˆΡ‚ΠΎ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ користитС со Python.

Π—ΠΎΡˆΡ‚ΠΎ Π»ΡƒΡ“Π΅Ρ‚ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°Π°Ρ‚ Alpine?

Π”Π° прСтпоставимС Π΄Π΅ΠΊΠ° Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° 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

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, основната слика Π·Π° Alpine Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠΌΠ°Π»Π°. АјдС сСга Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° инсталирамС 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

Π“ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ истото Π·Π° 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, Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° сликата Π΅ 105 MB наспроти 150 MB. Π’ΠΎΠ° Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ!

Но, Π°ΠΊΠΎ сС ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠΌΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Python, Ρ‚ΠΎΠ³Π°Ρˆ сè Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΡƒ Ρ€ΠΎΠ·ΠΎΠ²ΠΎ.

ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½ слика

АпликациитС Π½Π° Python чСсто користат ΠΏΠ°Π½Π΄ΠΈ ΠΈ matplotlib. Π—Π°Ρ‚ΠΎΠ°, Π΅Π΄Π½Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π΅ Π΄Π° ја Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° слика Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Debian ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΎΠ²Π°Π° 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

Π”ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ слика со Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΎΠ΄ 363 MB.
Π”Π°Π»ΠΈ ќС Π½ΠΈ Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ со Alpine? Π”Π° ΠΏΡ€ΠΎΠ±Π°ΠΌΠ΅:

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

Π¨Ρ‚ΠΎ сС случува?

Alpine Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Ρ‚Ρ€ΠΊΠ°Π»Π°

Ако ја ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°, која Π΅ Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Debian, ќС Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅Π·Π΅ΠΌΠ° matplotlib-3.1.2-cp38-cp38-manylinux1_x86_64.Π΄ΠΎΠ΄Π΅ΠΊΠ°.

Ова Π΅ Π±ΠΈΠ½Π°Ρ€Π΅Π½ Π·Π° Ρ‚Ρ€ΠΊΠ°Π»ΠΎ. Alpine Π³ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ° ΠΈΠ·Π²ΠΎΡ€ΠΈΡ‚Π΅ `matplotlib-3.1.2.tar.gz` бидСјќи Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° стандард Ρ‚Ρ€ΠΊΠ°Π»Π°.

Π—ΠΎΡˆΡ‚ΠΎ? ΠŸΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ дистрибуции Π½Π° Линукс ја користат GNU Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° (glibc) Π½Π° стандардната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C, која Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ ја Π±Π°Ρ€Π° сСкоја ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° напишана Π²ΠΎ C, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΎ ΠΈ Python. Но, Alpine користи β€žmuslβ€œ, ΠΈ бидСјќи Ρ‚ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сС Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ΠΈ Π·Π° β€žglibcβ€œ, Ρ‚ΠΈΠ΅ Сдноставно Π½Π΅ сС ΠΎΠΏΡ†ΠΈΡ˜Π°.

Π—Π°Ρ‚ΠΎΠ°, Π°ΠΊΠΎ користитС Alpine, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Ρ‚Π΅ Ρ†Π΅Π»ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ напишан Π²ΠΎ 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 сСкунди! А Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° сликата Π΅ 851 MB.

Π‘Π»ΠΈΠΊΠΈΡ‚Π΅ засновани Π½Π° Π°Π»ΠΏΠΈΠ½Π·ΠΈΡ‚Π΅ Π±Π°Ρ€Π°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ повСќС Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄Π°Ρ‚, Ρ‚ΠΈΠ΅ сС ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ сè ΡƒΡˆΡ‚Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π±Π°Ρ€Π°Ρ‚Π΅ ситС зависности. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° склопот ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΏΠΎΠ²Π΅ΡœΠ΅ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ Π³Ρ€Π°Π΄Π±ΠΈ Π½ΠΎ Ρ‚ΠΎΠ° Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡƒΡˆΡ‚Π΅ повСќС.

Воа нС С сС!

Alpine ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π½Π΅ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅

  • Π’ΠΎ Ρ‚Π΅ΠΎΡ€ΠΈΡ˜Π°, musl Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π΅Π½ со glibc, Π½ΠΎ Π²ΠΎ пракса Ρ€Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. И Π°ΠΊΠΎ сС, Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ ќС Π±ΠΈΠ΄Π°Ρ‚ Π½Π΅ΠΏΡ€ΠΈΡ˜Π°Ρ‚Π½ΠΈ. Π•Π²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΡ˜Π°Π²Π°Ρ‚:
  • Alpine стандардно ΠΈΠΌΠ° ΠΏΠΎΠΌΠ°Π»Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΎΡŸΠ°ΠΊΠΎΡ‚ Π½Π° нишки, ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Python
  • НСкои корисници Π³ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ˜Π° Ρ‚ΠΎΠ° ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ сС ΠΏΠΎΠ±Π°Π²Π½ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΎΡ‚ Π½Π° кој musl ја распрСдСлува ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° (Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΎΠ΄ glibc).
  • Π•Π΄Π΅Π½ ΠΎΠ΄ корисницитС најдС Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π΄Π°Ρ‚ΡƒΠΌΠΎΡ‚

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ ΠΎΠ²ΠΈΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ сС вСќС ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ, Π½ΠΎ којзнаС ΡƒΡˆΡ‚Π΅ ΠΊΠΎΠ»ΠΊΡƒ ќС ΠΈΠΌΠ°.

НС користСтС алпски слики Π·Π° Python

Ако Π½Π΅ сакатС Π΄Π° сС ΠΌΠ°Ρ‡ΠΈΡ‚Π΅ со Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ Π΄ΠΎΠ»Π³ΠΈ изданија, Π΄Π° Π±Π°Ρ€Π°Ρ‚Π΅ зависности ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π½Π΅ користСтС Alpine Linux ΠΊΠ°ΠΊΠΎ основна слика. Π˜Π·Π±ΠΎΡ€ Π½Π° Π΄ΠΎΠ±Ρ€Π° основна слика.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€