ืชืžื•ื ื•ืช ื“ื•ืงืจ ื–ืขื™ืจื•ืช ืฉื”ืืžื™ื ื• ื‘ืขืฆืžืŸ*

[ื”ืชื™ื™ื—ืกื•ืช ืœืื’ื“ืช ื”ื™ืœื“ื™ื ื”ืืžืจื™ืงืื™ืช "ื”ืžื ื•ืข ื”ืงื˜ืŸ ืฉื™ื›ื•ืœ" - ื‘ืขืจืš. ื ืชื™ื‘]*

ืชืžื•ื ื•ืช ื“ื•ืงืจ ื–ืขื™ืจื•ืช ืฉื”ืืžื™ื ื• ื‘ืขืฆืžืŸ*

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืชืžื•ื ื•ืช Docker ื–ืขื™ืจื•ืช ืœืฆืจื›ื™ื ืฉืœืš

ืื•ื‘ืกืกื™ื” ื™ื•ืฆืืช ื“ื•ืคืŸ

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

ืื ื™ ืžื‘ื™ืŸ, ื”ืจืขื™ื•ืŸ ืžื•ื–ืจ.

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

ืœืžื” ื”ื’ื•ื“ืœ ื—ืฉื•ื‘

ืขืœ ื™ื“ื™ ืฆืžืฆื•ื ื”ืชื•ื›ืŸ ืฉืœ ืชืžื•ื ืช Docker, ืื ื• ืžืฆืžืฆืžื™ื ื‘ื›ืš ืืช ืจืฉื™ืžืช ื”ืคื’ื™ืขื•ืช. ื‘ื ื•ืกืฃ, ืื ื• ื”ื•ืคื›ื™ื ืืช ื”ืชืžื•ื ื•ืช ืœื ืงื•ืช ื™ื•ืชืจ, ืžื›ื™ื•ื•ืŸ ืฉื”ืŸ ืžื›ื™ืœื•ืช ืจืง ืืช ืžื” ืฉื“ืจื•ืฉ ืœื”ืคืขืœืช ื™ื™ืฉื•ืžื™ื.

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

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

ืชืžื•ื ื•ืช ื—ืกืจื•ืช ืฆืจื•ืช

ืคืจื•ื™ืงื˜ Distroless ืžืฆื™ืขื” ืžื‘ื—ืจ ืฉืœ ืชืžื•ื ื•ืช ื‘ืกื™ืกื™ื•ืช "ื—ืกืจื•ืช ื”ืคืจืขื•ืช", ื”ืŸ ืื™ื ืŸ ืžื›ื™ืœื•ืช ืžื ื”ืœื™ ื—ื‘ื™ืœื•ืช, ืงื•ื ื›ื™ื•ืช ื•ื›ืœื™ ืขื–ืจ ืื—ืจื™ื ืฉืืชื” ืจื’ื™ืœ ืœืจืื•ืช ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”. ื›ืชื•ืฆืื” ืžื›ืš, ื”ืฉืชืžืฉ ื‘ืžื ื”ืœื™ ื—ื‘ื™ืœื•ืช ื›ืžื• 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

ืคื™ืค ืœื ื‘ืชืžื•ื ื”

ื‘ื“ืจืš ื›ืœืœ ื‘ืขื™ื” ื–ื• ื ืคืชืจืช ืขืœ ื™ื“ื™ ื‘ื ื™ื™ื” ืžืจื•ื‘ื” ืฉืœื‘ื™ื:

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 ืœื ืชื•ืžื›ืช ื‘ืชืžื•ื ื•ืช ืจื‘ื•ืช: ื’'ืื•ื•ื” ื•ืคื™ื™ืชื•ืŸ ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ ื”ื ื™ืกื•ื™, ื•ืคื™ื™ืชื•ืŸ ืงื™ื™ืžืช ืจืง ืขื‘ื•ืจ 2,7 ื•-3,5.

ืชืžื•ื ื•ืช ืงื˜ื ื˜ื ื•ืช

ื‘ื—ื–ืจื” ืœืื•ื‘ืกืกื™ื” ืฉืœื™ ืœื™ืฆื•ืจ ืชืžื•ื ื•ืช ืงื˜ื ื•ืช.

ื‘ืื•ืคืŸ ื›ืœืœื™, ืจืฆื™ืชื™ ืœืจืื•ืช ืื™ืš ื‘ื ื•ื™ื™ื ื“ื™ืžื•ื™ื™ื ื—ืกืจื™ ืžืขืฉื”. ื”ืคืจื•ื™ืงื˜ ื—ืกืจ ื”ื˜ืจื•ืจ ืžืฉืชืžืฉ ื‘ื›ืœื™ ื”ื‘ื ื™ื™ื” ืฉืœ ื’ื•ื’ืœ bazel. ืขื ื–ืืช, ื”ืชืงื ืช Bazel ื•ื›ืชื™ื‘ืช ืชืžื•ื ื•ืช ืžืฉืœืš ืœืงื—ื” ื”ืจื‘ื” ืขื‘ื•ื“ื” (ื•ืœืžืขืŸ ื”ืืžืช, ืœื”ืžืฆื™ื ืืช ื”ื’ืœื’ืœ ืžื—ื“ืฉ ื–ื” ื›ื™ืฃ ื•ืžืœืžื“). ืจืฆื™ืชื™ ืœืคืฉื˜ ืืช ื”ื™ืฆื™ืจื” ืฉืœ ืชืžื•ื ื•ืช ืงื˜ื ื•ืช ื™ื•ืชืจ: ื”ืคืขื•ืœื” ืฉืœ ื™ืฆื™ืจืช ืชืžื•ื ื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ื‘ึผึธื ึธืืœึดื™. ื›ื“ื™ ืฉืœื ื™ื”ื™ื• ืงื‘ืฆื™ ืชืฆื•ืจื” ืขื‘ื•ืจืš, ืจืง ืฉื•ืจื” ืื—ืช ื‘ืžืกื•ืฃ: ะฟั€ะพัั‚ะพ ัะพะฑั€ะฐั‚ัŒ ะพะฑั€ะฐะท ะดะปั <ะฟั€ะธะปะพะถะตะฝะธะต>.

ืื–, ืื ืืชื” ืจื•ืฆื” ืœื™ืฆื•ืจ ืชืžื•ื ื•ืช ืžืฉืœืš, ืื– ื“ืข: ื™ืฉ ืชืžื•ื ืช ื“ื•ืงืจ ื™ื™ื—ื•ื“ื™ืช ื›ื–ื•, scratch. Scratch ื”ื™ื ืชืžื•ื ื” "ืจื™ืงื”", ืื™ืŸ ื‘ื” ืงื‘ืฆื™ื, ืœืžืจื•ืช ืฉื”ื™ื ืฉื•ืงืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ - ื•ื•ืื•! - 77 ื‘ืชื™ื.

FROM scratch

ืชืžื•ื ื” ืœืฉืจื•ื˜

ื”ืจืขื™ื•ืŸ ืฉืœ ืชืžื•ื ืช ืฉืจื™ื˜ื” ื”ื•ื ืฉืืชื” ื™ื›ื•ืœ ืœื”ืขืชื™ืง ืœืชื•ื›ื” ื›ืœ ืชืœื•ืช ืžื”ืžื—ืฉื‘ ื”ืžืืจื— ื•ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ืชื•ืš Dockerfile (ื–ื” ื›ืžื• ืœื”ืขืชื™ืง ืื•ืชื ืœ- apt ื•ืœื”ืชืงื™ืŸ ืžืืคืก), ืื• ืžืื•ื—ืจ ื™ื•ืชืจ ื›ืืฉืจ ืชืžื•ื ืช Docker ืชืชืžืžืฉ. ื–ื” ืžืืคืฉืจ ืœืš ืœืฉืœื•ื˜ ืœื—ืœื•ื˜ื™ืŸ ืขืœ ื”ืชื•ื›ืŸ ืฉืœ ื”-Docker, ื•ื‘ื›ืš ืœืฉืœื•ื˜ ืœื—ืœื•ื˜ื™ืŸ ื‘ื’ื•ื“ืœ ื”ืชืžื•ื ื”.

ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืื™ื›ืฉื”ื• ืœืืกื•ืฃ ืืช ื”ืชืœื•ืช ื”ืืœื”. ื›ืœื™ื ืงื™ื™ืžื™ื ื›ืžื• apt ืžืืคืฉืจื™ื ืœืš ืœื”ื•ืจื™ื“ ื—ื‘ื™ืœื•ืช, ืื‘ืœ ื”ืŸ ืงืฉื•ืจื•ืช ืœืžื—ืฉื‘ ื”ื ื•ื›ื—ื™, ื•ืื—ืจื™ ื”ื›ืœ, ืื™ื ืŸ ืชื•ืžื›ื•ืช ื‘-Windows ืื• ื‘-MacOS.

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

ืงืจืืชื™ ืœื›ืœื™ fetchy, ื›ื™ ื”ื•ื... ืžื•ืฆื ื•ืžื‘ื™ื... ืžื” ืฉืฆืจื™ืš [ืžืื ื’ืœื™ืช "ืœื”ื‘ื™ื", "ืœื”ื‘ื™ื" - ื‘ืขืจืš. ื ืชื™ื‘]. ื”ื›ืœื™ ืขื•ื‘ื“ ื“ืจืš ืžืžืฉืง ืฉื•ืจืช ืคืงื•ื“ื”, ืืš ื‘ืžืงื‘ื™ืœ ืžืฆื™ืข API.

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

ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ืื™ืœื• ืชืœื•ืช ืื™ื ืŸ ื ื—ื•ืฆื•ืช ื›ืœืœ (ื‘ื”ืงืฉืจ ืฉืœื ื•) ื•ืœื ืœื›ืœื•ืœ ืื•ืชืŸ. ืœื“ื•ื’ืžื”, Python ืชืœื•ื™ ื‘-perl, ืื ื›ื™ ื–ื” ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ื‘ืœื™ ืฉื”-Perl ืžื•ืชืงืŸ.

ืžืžืฆืื™ื

ืชืžื•ื ืช Python ื ื•ืฆืจื” ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” fetchy dockerize python3.5 ืฉื•ืงืœ ืจืง 35MB (ืื ื™ ื™ื•ืชืจ ืžื‘ื˜ื•ื— ืฉื‘ืขืชื™ื“ ืืคืฉืจ ืœื”ืคื•ืš ืื•ืชื• ืœืงืœ ืขื•ื“ ื™ื•ืชืจ). ืžืกืชื‘ืจ ืฉื”ืฆืœื—ื ื• ืœื’ืœื— ืขื•ื“ 15 WW ืžื”ืชืžื•ื ื” ื—ืกืจืช ื”ื˜ืจื•ืจ.

ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื›ืœ ื”ืชืžื•ื ื•ืช ืฉื ืืกืคื• ืขื“ ื›ื” ื›ืืŸ.

ืคืจื•ื™ืงื˜ - ื›ืืŸ.

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

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

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