αžšαžΌαž”αž—αžΆαž–αžαžΌαž… Docker αžŠαŸ‚αž›αž‡αžΏαž‡αžΆαž€αŸ‹αž›αžΎαžαŸ’αž›αž½αž“αž―αž„*

[αž™αŸ„αž„αž‘αŸ…αžšαžΏαž„αž“αž·αž‘αžΆαž“αžšαž”αžŸαŸ‹αž€αž»αž˜αžΆαžšαž’αžΆαž˜αŸαžšαž·αž… "αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΌαž…αžŠαŸ‚αž›αž’αžΆαž…" - αž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αŸ” αž•αŸ’αž›αžΌαžœ]*

αžšαžΌαž”αž—αžΆαž–αžαžΌαž… Docker αžŠαŸ‚αž›αž‡αžΏαž‡αžΆαž€αŸ‹αž›αžΎαžαŸ’αž›αž½αž“αž―αž„*

αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžαžΌαž…αŸ—αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž€αžΆαžšαžŸαŸ’αžšαž˜αžΎαžŸαŸ’αžšαž˜αŸƒαž˜αž·αž“αž’αž˜αŸ’αž˜αžαžΆ

αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž–αžΈαžšαž”αžΈαžαŸ‚αž€αž“αŸ’αž›αž„αž˜αž€αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžˆαŸ’αž›αž€αŸ‹αžœαž„αŸ’αžœαŸαž„αž“αžΉαž„αžαžΆαžαžΎαžšαžΌαž”αž—αžΆαž– Docker αž’αžΆαž…αž˜αžΆαž“αž‘αŸ†αž αŸ†αž”αŸ‰αž»αž“αžŽαžΆ αž αžΎαž™αž“αŸ…αžαŸ‚αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš?

αžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹ αž‚αŸ†αž“αž·αžαž‚αžΊαž…αž˜αŸ’αž›αŸ‚αž€αŸ”

αž˜αž»αž“αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αž“αž·αž„αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αžšαŸ†αžαžΆαž“αžαŸ’αž‰αž»αŸ†αžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αžαžΎαžœαžΆαž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž’αŸ’αž“αž€αž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž‘αŸ†αž αŸ†αžŸαŸ†αžαžΆαž“αŸ‹

αžŠαŸ„αž™αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αž αŸαžαž»αž“αŸαŸ‡ αž™αžΎαž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž”αž‰αŸ’αž‡αžΈαž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž™αžΎαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αžšαžΌαž”αž—αžΆαž–αž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸ’αž’αžΆαž αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž•αŸ’αž‘αž»αž€αžαŸ‚αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž˜αžΆαž“αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžαžΌαž…αž˜αž½αž™αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž - αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αž™αž€αž›αžΏαž“αž‡αžΆαž„αž”αž“αŸ’αžαž·αž… αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžœαžΆαž˜αž·αž“αžŸαžΌαžœαžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸαŸ”

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž—αž’αŸ†αž–αžΈαž‘αŸ†αž αŸ† αž—αŸ’αž“αŸ†αž’αžΆαž›αŸ‹αž•αŸ‚αž“αž˜αžΎαž›αž‘αŸ…αžαŸ’αž›αž½αž“αž―αž„αžαžΌαž… αž αžΎαž™αž‘αŸ†αž“αž„αž‡αžΆαžŸαž˜αž“αžΉαž„αž’αŸ’αž“αž€αŸ”

αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“

αž‚αž˜αŸ’αžšαŸ„αž„αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“ αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαžšαžΌαž”αž—αžΆαž– "αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“" αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž–αž½αž€αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹ αžŸαŸ‚αž› αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αžƒαžΎαž‰αž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαžΌαž… pip ΠΈ apt αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

FROM gcr.io/distroless/python3
RUN  pip3 install numpy

Dockerfile αžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž–αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“ Python 3

Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM gcr.io/distroless/python3
 ---> 556d570d5c53
Step 2/2 : RUN  pip3 install numpy
 ---> Running in dbfe5623f125
/bin/sh: 1: pip3: not found

Pip αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž‘αŸαŸ”

αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ–

FROM python:3 as builder
RUN  pip3 install numpy

FROM gcr.io/distroless/python3
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.5/

αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›

αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαžšαžΌαž”αž—αžΆαž–αž‘αŸ†αž αŸ† 130MB αŸ” αž˜αž·αž“αž’αžΆαž€αŸ’αžšαž€αŸ‹β€‹αž–αŸαž€β€‹αž‘αŸ! αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αŸ– αžšαžΌαž”αž—αžΆαž– Python αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹ 929MB αž“αž·αž„ "αžŸαŸ’αžαžΎαž„αž‡αžΆαž„" αž˜αž½αž™ (3,7-slim) - 179MB αžšαžΌαž”αž—αžΆαž–αž’αžΆαž›αŸ‹αž•αŸ‚αž“ (3,7-alpine) αž‚αžΊ 98,6MB αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αž‚αŸ’αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž‚αžΊ 50,9MB αŸ”

αžœαžΆαž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž˜αž»αž“αž™αžΎαž„αž€αŸ†αž–αž»αž„αž…αž˜αŸ’αž›αž„αžαžαž‘αžΆαŸ†αž„αž˜αžΌαž› /usr/local/lib/python3.7/site-packagesαžŠαŸ‚αž›αž’αžΆαž…αž•αŸ’αž‘αž»αž€αž“αžΌαžœαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸƒαž‘αŸ†αž αŸ†αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ Python αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αŸ”

αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžš Google distroless αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαžšαžΌαž”αž—αžΆαž–αž…αŸ’αžšαžΎαž“αž‘αŸαŸ– Java αž“αž·αž„ Python αž“αŸ…αžαŸ‚αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž–αž·αžŸαŸ„αž’αž“αŸ αž αžΎαž™ Python αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚ 2,7 αž“αž·αž„ 3,5 αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžšαžΌαž”αž—αžΆαž–αžαžΌαž…αŸ—

αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž€αžΆαžšαž‚αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αžαžΌαž…αŸ—αŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αŸ” αž‚αž˜αŸ’αžšαŸ„αž„αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹ Google bazel. αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Bazel αž“αž·αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαžšαžΌαž”αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž…αŸ’αžšαžΎαž“ (αž αžΎαž™αž“αž·αž™αžΆαž™αžŠαŸ„αž™αžŸαŸ’αž˜αŸ„αŸ‡αžαŸ’αžšαž„αŸ‹ αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αž„αŸ‹αž‘αžΎαž„αžœαž·αž‰αž‚αžΊαžŸαž”αŸ’αž”αžΆαž™ αž“αž·αž„αž’αž”αŸ‹αžšαŸ†)αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αžŸαž˜αŸ’αžšαž½αž›β€‹αžŠαž›αŸ‹β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžšαžΌαž”αž—αžΆαž–β€‹αžαžΌαž…αŸ—αŸ– αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžšαžΌαž”αž—αžΆαž–β€‹αž‚αž½αžšαžαŸ‚β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž”αŸ†αž•αž»αž banal. αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαžΆαž˜αž·αž“αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‘αŸ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž“αŸ’αž‘αžΆαžαŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž›αŸ– просто ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· для <ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅>.

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαžΉαž„αžαžΆαž˜αžΆαž“αžšαžΌαž”αž—αžΆαž– docker αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ” scratch. αž€αŸ„αžŸαž‚αžΊαž‡αžΆαžšαžΌαž”αž—αžΆαž– "αž‘αž‘αŸ" αž˜αž·αž“αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž‘αŸ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž€αŸαžŠαŸ„αž™ - αž’αžΈαž™αŸ‰αžΆ! - ៧៧ αž”αŸƒαŸ”

FROM scratch

αžšαžΌαž”αž—αžΆαž–αž€αŸ„αžŸ

αž‚αŸ†αž“αž·αžαž“αŸƒαžšαžΌαž”αž—αžΆαž–αž€αŸ„αžŸαž‚αžΊαžαžΆαž’αŸ’αž“αž€αž’αžΆαž…αž…αž˜αŸ’αž›αž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŽαžΆαž˜αž½αž™αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αž αžΎαž™αž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ Dockerfile (αžœαžΆαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž–αž½αž€αžœαžΆαž‘αŸ… apt αž“αž·αž„αžŠαŸ†αž‘αžΎαž„αž–αžΈαž‘αž‘αŸ) αž¬αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž– Docker αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ” αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αžΌαžœαž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹ Docker container αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αŸ†αž αŸ†αžšαžΌαž”αž—αžΆαž–αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαž˜αžΌαž›αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαŸ„αž™αžŠαžΌαž…αž˜αŸ’αžŠαŸαž…αŸ” αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžŠαžΌαž…αž‡αžΆ apt αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž’αŸ’αž“αž€β€‹αž‘αžΆαž‰β€‹αž™αž€β€‹αž€αž‰αŸ’αž…αž”αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž–αž½αž€β€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž‘αŸ…β€‹αž“αžΉαž„β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™β€‹αž˜αž·αž“β€‹αž‚αžΆαŸ†αž‘αŸ’αžš Windows ឬ MacOS αž‘αŸαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž§αž”αž€αžšαžŽαŸβ€‹αž•αŸ’αž‘αžΆαž›αŸ‹β€‹αžαŸ’αž›αž½αž“β€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž‰αž»αŸ†β€‹αžŠαŸ‚αž›β€‹αž“αžΉαž„β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžšαžΌαž”αž—αžΆαž–β€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αž“αŸƒβ€‹αž‘αŸ†αž αŸ†β€‹αžαžΌαž…β€‹αž”αŸ†αž•αž»αžβ€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž‘αŸ…β€‹αž”αžΆαž“β€‹αžŠαŸ„αž™β€‹αžŸαŸ’αžœαŸαž™β€‹αž”αŸ’αžšαžœαžαŸ’αžαž· αž αžΎαž™β€‹αž€αŸβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžŽαžΆβ€‹αž˜αž½αž™β€‹αžŠαŸ‚αžšαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎαž€αž‰αŸ’αž…αž”αŸ‹ Ubuntu/Debian αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ (αž‘αž‘αž½αž›αž”αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„) αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‘αžΎαž„αžœαž·αž‰αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαž“αŸ’αž˜αžαŸ‹β€‹αžαžΆβ€‹αž“αžΉαž„β€‹αž‘αžΆαž‰β€‹αž™αž€β€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αž€αŸ†αžŽαŸ‚β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžŸαŸ’αžαž·αžšαž—αžΆαž–β€‹αž…αž»αž„β€‹αž€αŸ’αžšαŸ„αž™β€‹αžŠαŸ„αž™β€‹αžŸαŸ’αžœαŸαž™β€‹αž”αŸ’αžšαžœαžαŸ’αžαž· αžŠαŸ„αž™β€‹αž€αžΆαžαŸ‹β€‹αž”αž“αŸ’αžαž™β€‹αž αžΆαž“αž·αž—αŸαž™β€‹αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–β€‹αž±αŸ’αž™β€‹αž”αžΆαž“β€‹αž…αŸ’αžšαžΎαž“β€‹αžαžΆαž˜β€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž‘αŸ…β€‹αž”αžΆαž“αŸ”

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž§αž”αž€αžšαžŽαŸ fetchyαž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž‚αžΆαžαŸ‹... αžšαž€αžƒαžΎαž‰ αž“αž·αž„αž“αžΆαŸ†αž™αž€...αž–αžΈαž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ "αž™αž€", "αž“αžΆαŸ†" - αž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αŸ” αž•αŸ’αž›αžΌαžœ] αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž•αŸ’αžαž›αŸ‹αž“αžΌαžœ API αž˜αž½αž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžšαžΌαž”αž—αžΆαž–αžŠαŸ„αž™αž”αŸ’αžšαžΎ fetchy (αž›αžΎαž€αžšαžΌαž”αž—αžΆαž– Python αž›αžΎαž€αž“αŸαŸ‡) αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ CLI αžŠαžΌαž…αž“αŸαŸ‡αŸ– fetchy dockerize python. αž’αŸ’αž“αž€αž’αžΆαž…αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž½αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αŸ„αž›αžŠαŸ…αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž€αžΌαžŠαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ fetchy αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž”αŸ’αžšαžΎαžαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ Debian αž“αž·αž„ Ubuntu αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡ (αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αžšαž”αžŸαŸ‹αž™αžΎαž„) αž αžΎαž™αžŠαž€αžœαžΆαž…αŸαž‰αŸ” αž§αž‘αžΆαž αžšαžŽαŸ Python αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎ perl αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ†αž‘αžΎαž„ Perl αž€αŸαžŠαŸ„αž™αŸ”

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

αžšαžΌαž”αž—αžΆαž– Python αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ fetchy dockerize python3.5 αž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹αžαŸ’αžšαžΉαž˜αžαŸ‚ 35MB (αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΆαž€αžŠαž€αŸ’αž“αž»αž„αž…αž·αžαŸ’αžαžαžΆαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αžœαžΆαž’αžΆαž…αž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸ’αžšαžΆαž›αž‡αžΆαž„αž˜αž»αž“)αŸ” αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž™αžΎαž„αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ„αžšαžŸαž€αŸ‹ 15 WW αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž–αžΈαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžšαŸ†αžαžΆαž“αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž˜αž€αž‘αž›αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž‚αž˜αŸ’αžšαŸ„αž„ - αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαžαŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαžΎ - αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αž½αž™ :) αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ…αž€αŸ’αž“αž»αž„ fetchy αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž˜αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αŸαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹