เบฎเบนเบšเบžเบฒเบš Docker เบ™เป‰เบญเบเป†เบ—เบตเปˆเป€เบŠเบทเปˆเบญเปƒเบ™เบ•เบปเบงเป€เบญเบ‡*

[เบญเป‰เบฒเบ‡เบญเบดเบ‡เป€เบ–เบดเบ‡เป€เบ—เบšเบ™เบดเบเบฒเบเบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบเบญเบฒเป€เบกเบฅเบดเบเบฒ "เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ™เป‰เบญเบเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰" - เบ›เบฐเบกเบฒเบ™. เป€เบฅเบ™]*

เบฎเบนเบšเบžเบฒเบš Docker เบ™เป‰เบญเบเป†เบ—เบตเปˆเป€เบŠเบทเปˆเบญเปƒเบ™เบ•เบปเบงเป€เบญเบ‡*

เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™

Obsession เบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบด

เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบชเบฒเบกเป€เบ”เบทเบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบกเบปเบฒเบกเบปเบงเบเบฑเบšเบงเปˆเบฒเบฎเบนเบšเบžเบฒเบš Docker เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เปเบฅเบฐเบเบฑเบ‡เบกเบตเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบšเป?

เบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆ, เบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เปเบ›เบ.

เบเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปเบฅเบฐเป€เบ•เบฑเบเบ™เบดเบ, เบ‚เป‰เบญเบเบขเบฒเบเบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบเบฑเบ‡เบงเบปเบ™เบซเบผเบฒเบ, เปเบฅเบฐเบกเบฑเบ™เป€เบ›เบฑเบ™เบซเปˆเบงเบ‡เป€เบˆเบปเป‰เบฒเปเบ™เบงเปƒเบ”.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เบฐเปœเบฒเบ”เบˆเบถเปˆเบ‡เบชเบณเบ„เบฑเบ™

เป‚เบ”เบเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš Docker, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบซเบผเบธเบ”เบœเปˆเบญเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เบฎเบนเบšเบžเบฒเบšเบชเบฐเบญเบฒเบ”เบ‚เบถเป‰เบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เบกเบตเบ›เบฐเป‚เบซเบเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡ - เบฎเบนเบšเบžเบฒเบšเบ–เบทเบเบ”เบฒเบงเป‚เบซเบฅเบ”เป„เบงเบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบ.

เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹: เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบเบฑเบ‡โ€‹เบงเบปเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹, Alpine เป€เบšเบดเปˆเบ‡โ€‹เบ•เบปเบงโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบกเบตโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เปเบฅเบฐโ€‹เบˆเบฐโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เบเบฑเบšโ€‹เบ—เปˆเบฒเบ™โ€‹.

เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบปเบšเบเบงเบ™

เป‚เบ„เบ‡เบเบฒเบ™ Distroless เบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™ "distroless", เบžเบงเบเบกเบฑเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”, เบซเบญเบเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰เบญเบทเปˆเบ™เป†เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบ„เบตเบเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบŠเป‰เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เป€เบŠเบฑเปˆเบ™ pip ะธ apt เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ:

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

Dockerfile เปƒเบŠเป‰ Python 3 เบฎเบนเบš distroless

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, เบฎเบนเบš alpine (3,7-alpine) เปเบกเปˆเบ™ 98,6MB, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบฎเบนเบš distroless เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ 50,9MB.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบธเบ•เบดเบ—เปเบฒเบ—เบตเปˆเบˆเบฐเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ„เบฑเบ”เบฅเบญเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ” /usr/local/lib/python3.7/site-packages, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™ Python เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™, Google distroless เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฎเบนเบšเบžเบฒเบšเบซเบผเบฒเบ: Java เปเบฅเบฐ Python เบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปเบฅเบฐ Python เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš 2,7 เปเบฅเบฐ 3,5.

เบฎเบนเบšเบžเบฒเบšเบ™เป‰เบญเบเป†

เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™ obsession เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ.

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบฒเบเป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบปเบšเบเบงเบ™. เป‚เบ„เบ‡เบเบฒเบ™ distroless เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเป‰เบฒเบ‡เบ‚เบญเบ‡ Google bazel. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Bazel เปเบฅเบฐเบเบฒเบ™เบ‚เบฝเบ™เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบฒเบ (เปเบฅเบฐเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบŠเบทเปˆเบชเบฑเบ”, reinventing เบฅเปเป‰เปเบกเปˆเบ™เบกเปˆเบงเบ™เปเบฅเบฐเบเบฒเบ™เบชเบถเบเบชเบฒ). เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹: เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹, banal. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™, เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เปเบ–เบงเปƒเบ™ console: ะฟั€ะพัั‚ะพ ัะพะฑั€ะฐั‚ัŒ ะพะฑั€ะฐะท ะดะปั <ะฟั€ะธะปะพะถะตะฝะธะต>.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฎเบนเป‰เบงเปˆเบฒ: เบกเบตเบฎเบนเบšเบžเบฒเบš docker เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, scratch. เบฎเบญเบเบ‚เบตเบ”เบ‚เปˆเบงเบ™เปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบš "เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ", เบšเปเปˆเบกเบตเป„เบŸเบฅเปŒเปƒเบ”เป†เปƒเบ™เบกเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบกเบตเบ™เป‰เปเบฒเบซเบ™เบฑเบเบ•เบฒเบกเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - wow! - 77 เป„เบšเบ•เปŒ.

FROM scratch

เบฎเบนเบšเบžเบฒเบšเบ‚เบนเบ”

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš scratch เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบฑเบ”เบฅเบญเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบ”เป†เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เป‚เบฎเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™เปเบฅเบฐเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ Dockerfile (เบญเบฑเบ™เบ™เบตเป‰เบ„เบทเบเบฑเบšเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบžเบงเบเบกเบฑเบ™เปƒเบชเปˆ. apt เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™), เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบฎเบนเบšเบžเบฒเบš Docker เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบงเบšเบ„เบธเบกเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบ–เบฑเบ‡ Docker เป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ„เบงเบšเบ„เบธเบกเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ somehow เป€เบเบฑเบš dependencies เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเป€เบŠเบฑเปˆเบ™: apt เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบžเบฑเบเป€เบเบฑเบ”, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Windows เบซเบผเบท MacOS.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบญเบ‡เบ—เบตเปˆเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฐเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบชเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐเบเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ”เป†. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบซเบธเป‰เบกโ€‹เบซเปเปˆ Ubuntu / Debianโ€‹, เป€เบฎเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบ (เบเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบซเบธเป‰เบกโ€‹เบซเปเปˆโ€‹เป‚เบ”เบโ€‹เบเบปเบ‡โ€‹เบˆเบฒเบ repositoriesโ€‹) เปเบฅเบฐ recursively เป„เบ”เป‰โ€‹เบžเบปเบšโ€‹เป€เบซเบฑเบ™โ€‹เบเบฒเบ™โ€‹เป€เบžเบดเปˆเบ‡โ€‹เบžเบฒโ€‹เบญเบฒโ€‹เป„เบชโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹. เป‚เบ›เบฅเปเบเบฅเบกเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบ”เบฒเบงเป‚เบซเบผเบ”เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเปเบฑเป‰เบ™เบ„เบปเบ‡เบซเบผเป‰เบฒเบชเบธเบ”เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”, เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ”เป‰เบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบซเป‰เปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

เบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เบŠเบทเปˆเป€เบ„เบทเปˆเบญเบ‡เบกเบท fetchyเป€เบžเบฒเบฐโ€‹เบงเปˆเบฒโ€‹เบฅเบฒเบงโ€‹เบŠเบญเบโ€‹เบซเบฒ เปเบฅเบฐโ€‹เบ™เบณโ€‹เป€เบญเบปเบฒโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบณเป€เบ›เบฑเบ™ [เบˆเบฒเบเบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ” "fetch", "เป€เบญเบปเบฒเบกเบฒ" - เบ›เบฐเบกเบฒเบ™. เป€เบฅเบ™]. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบชเบฐเป€เบซเบ™เบต API.

เป€เบžเบทเปˆเบญเบ›เบฐเบเบญเบšเบฎเบนเบšเบžเบฒเบšเป‚เบ”เบเปƒเบŠเป‰ fetchy (เปƒเบซเป‰เป€เบญเบปเบฒเบฎเบนเบš Python เปƒเบ™เบ„เบฑเป‰เบ‡เบ™เบตเป‰), เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ CLI เปเบšเบšเบ™เบตเป‰: fetchy dockerize python. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ–เบฒเบกเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบŠเบทเปˆเป€เบžเบฒเบฐเบงเปˆเบฒ fetchy เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เปเบžเบฑเบเป€เบเบฑเบ”เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Debian เปเบฅเบฐ Ubuntu.

เบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” (เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ) เปเบฅเบฐเบเบปเบเป€เบงเบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, Python เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบš perl, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Perl.

ะ ะตะทัƒะปัŒั‚ะฐั‚ั‹

เบฎเบนเบšเบžเบฒเบš Python เบชเป‰เบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ fetchy dockerize python3.5 เบกเบตเบ™เปเป‰เบฒเบซเบ™เบฑเบเบžเบฝเบ‡เปเบ•เปˆ 35MB (เบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบšเบปเบฒเบเบงเปˆเบฒ). เบกเบฑเบ™ turns เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™โ€‹เป€เบžเบทเปˆเบญ shave off เบญเบตเบ 15 WW เบˆเบฒเบโ€‹เบฎเบนเบšโ€‹เบžเบฒเบš distrolessโ€‹.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบกเบฒเป€เบ–เบดเบ‡เบ•เบญเบ™เบ™เบฑเป‰เบ™ เบ—เบตเปˆเบ™เบตเป‰.

เป‚เบ„เบ‡เบเบฒเบ™ - เบ—เบตเปˆเบ™เบตเป‰.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ‚เบฒเบ”เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เบžเบฝเบ‡เปเบ•เปˆเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป - เบ‚เป‰เบญเบเบˆเบฐเบเบดเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบ :) เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบซเบผเบฒเบ, เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบญเบทเปˆเบ™เป†เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ fetchy, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™