[ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΡΠΌ Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠ°ΡΠ° Π΄Π΅ΡΡΠΊΠ° ΠΏΡΠΈΠΊΠ°Π·ΠΊΠ° βΠΠ°Π»ΠΊΠΈΡΡ Π»ΠΎΠΊΠΎΠΌΠΎΡΠΈΠ², ΠΊΠΎΠΉΡΠΎ Π²ΡΡΠ²Π°ΡΠ΅ Π² ΡΠ΅Π±Π΅ ΡΠΈβ (The Little Engine That Could) β Π±Π΅Π»Π΅ΠΆΠΊΠ° Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°]*

ΠΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΠ½ΠΈ docker ΠΎΠ±ΡΠ°Π·ΠΈ Π·Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ Π½ΡΠΆΠ΄ΠΈ
ΠΠ΅ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° ΠΎΠ±ΡΠ΅ΡΠΈΡ
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠ΅ΡΠ° Π±ΡΡ ΠΎΠ±ΡΠ΅Π±Π΅Π½ ΠΎΡ Π½Π°ΡΡΠ°ΠΏΡΠΈΠ²Π° ΠΈΠ΄Π΅Ρ: ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ°Π»ΡΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ Docker ΠΎΠ±ΡΠ°Π·, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ?
Π Π°Π·Π±ΠΈΡΠ°ΠΌ, ΡΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π΅ ΡΡΡΠ°Π½Π½Π°.
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠΈΠΌ Π² Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ, Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΠΎΠ±ΡΡΠ½Ρ Π·Π°ΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΠΈ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠΉ ΠΊΠ°ΡΠ°Π΅ Π²Π°Ρ.
ΠΠ°ΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΡ ΠΈΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker ΠΎΠ±ΡΠ°Π·Π°, Π½ΠΈΠ΅ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ ΠΏΠΎ-ΡΠΈΡΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΌΠ° ΠΎΡΠ΅ Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ β ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, Π½ΠΎ Π·Π° ΠΌΠ΅Π½ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ.
ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΊΠΎ Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΠΌΠ΅ΡΡΡ, ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ Alpine ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΈ ΡΠ° ΠΌΠ°Π»ΠΊΠΈ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π²ΠΈ ΡΠ΅ ΡΡΠΎΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ.
Distroless-ΠΎΠ±ΡΠ°Π·ΠΈ
ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΈ βdistrolessβ ΠΎΠ±ΡΠ°Π·ΠΈ, ΡΠ΅ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠΈΠ»ΠΈΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΅ ΡΠ²ΠΈΠΊΠ½Π°Π»ΠΈ Π΄Π° Π²ΠΈΠΆΠ΄Π°ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΠ°ΡΠΎ pip ΠΈ apt Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ:
FROM gcr.io/distroless/python3
RUN pip3 install numpyDockerfile, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ distroless ΠΎΠ±ΡΠ°Π· Python 3
ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ Docker Π΄Π΅ΠΌΠΎΠ½ 2.048kB
Π‘ΡΡΠΏΠΊΠ° 1/2 : FROM gcr.io/distroless/python3
---> 556d570d5c53
Π‘ΡΡΠΏΠΊΠ° 2/2 : RUN pip3 install numpy
---> ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½Π΅ Π² dbfe5623f125
/bin/sh: 1: pip3: Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½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.
ΠΠΈΠ½ΠΈΠ°ΡΡΡΠ½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ
ΠΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ Π½Π° ΠΌΠΎΠ΅ΡΠΎ ΠΎΠ±ΡΠ΅ΡΠΈΠ²Π½ΠΎ ΡΠ²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°Π»ΠΊΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ.
ΠΡΠΊΠ°Ρ
Π΄Π° Π²ΠΈΠ΄Ρ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ distroless-ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅. ΠΡΠΎΠ΅ΠΊΡΡΡ distroless ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Google bazel. ΠΠ° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌ Bazel ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ° ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΌΠΈ ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΡΠ΄Ρ (ΠΈ, Π°ΠΊΠΎ Π±ΡΠ΄Π° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ΅ΡΡΠ΅Π½, Π·Π° ΠΌΠ΅Π½ Π±Π΅ΡΠ΅ Π·Π°Π±Π°Π²Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΏΡΠ΅ΠΎΡΠΊΡΠΈΠ²Π°ΠΌ ΠΊΠΎΠ»Π΅Π»ΠΎΡΠΎ). ΠΡΠΊΠ°Ρ
Π΄Π° ΠΎΠΏΡΠΎΡΡΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ: Π°ΠΊΡΡΡ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π· ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡ, Π±Π°Π½Π°Π»Π΅Π½. ΠΠ° Π΄Π° Π½ΡΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°: ΠΏΡΠΎΡΡΠΎ ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ°Π· Π·Π°.
Π ΡΠ°ΠΊΠ°, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ, Π·Π½Π°ΠΉΡΠ΅: ΠΈΠΌΠ° ΡΠ°ΠΊΡΠ² ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ docker ΠΎΠ±ΡΠ°Π·, scratch. Scratch Π΅ "ΠΏΡΠ°Π·Π΅Π½" ΠΎΠ±ΡΠ°Π·, Π² Π½Π΅Π³ΠΎ Π½ΡΠΌΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ΠΆΠΈ β ΠΎ, ΡΡΠ΄ΠΎ! β 77 Π±Π°ΠΉΡΠ°.
FROM scratchΠΠ±ΡΠ°Π·ΡΡ scratch
ΠΈΠ΄Π΅ΡΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·Π° scratch Π΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Ρ
ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π° ΠΈ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π² Dockerfile (ΠΊΠΎΠ΅ΡΠΎ Π΅ Π²ΡΠ΅ Π΅Π΄Π½ΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π² apt ΠΈ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΎΡ Π½ΡΠ»Π°ΡΠ°), ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΠ±ΡΠ°Π·ΡΡ Docker ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π°Π΄ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ, ΡΠ°ΠΊΠ°, Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·Π°.
Π ΡΠ΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΠΌ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ΅Π·ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π‘Π΅Π³Π°ΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ apt Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ²Π°Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π½ΠΎ ΡΠ΅ ΡΠ° ΠΎΠ±Π²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ, Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ°, Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Windows ΠΈΠ»ΠΈ MacOS.
Π ΡΠ°ΠΊΠ°, ΡΠ΅ΡΠΈΡ Π΄Π° ΡΡΠ·Π΄Π°ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΎΠ±ΡΠ°Π· Ρ Π½Π°ΠΉ-ΠΌΠ°Π»ΡΠΊ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ Ubuntu/Debian, ΠΏΡΠ°Π²Π΅Ρ ΠΈΠ·Π±ΠΎΡΠΊΠ° (ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅) ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π½Π°ΠΌΠΈΡΠ°Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΡΡΠ±Π²Π°ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ²Π°Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΉΠΊΠΈ ΡΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π³ΠΎ Π½Π°ΡΠ΅ΠΊΠΎΡ
fetchy, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠΉβ¦ Π½Π°ΠΌΠΈΡΠ° ΠΈ Π½ΠΎΡΠΈβ¦ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ Π΅ Π½ΡΠΆΠ½ΠΎ [ΠΎΡ Π°Π½Π³Π». βfetchβ, βΠ½ΠΎΡΠ΅Π½Π΅β β Π±Π΅Π». ΡΠ΅Π΄.]. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ ΡΠ°Π±ΠΎΡΠΈ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π½ΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈ API.
ΠΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΎΠ±ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° fetchy (Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΡΠΎΠ·ΠΈ ΠΏΡΡ ΠΎΠ±ΡΠ°Π·Π° Python), ΡΡΡΠ±Π²Π° ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ CLI ΡΠ°ΠΊΠ°: fetchy dockerize python. ΠΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΡΠΎ ΠΈΠΌΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ fetchy Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° Debian ΠΈ Ubuntu.
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ (Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ) ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Python Π·Π°Π²ΠΈΡΠΈ ΠΎΡ perl, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎ Π±Π΅Π· ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Perl.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ
ΠΠ±ΡΠ°Π·ΡΡ Π½Π° Python, ΡΡΠ·Π΄Π°Π΄Π΅Π½ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° fetchy dockerize python3.5 ΠΏΠΎΠΏΠΈΠ²Π° ΡΠ°ΠΌΠΎ 35ΠΠ (ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ, ΡΠ΅ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ ΠΎΡΠ΅ ΠΏΠΎ-Π»Π΅ΠΊ). Π’Π°ΠΊΠ° ΡΠ΅, Ρ distroless-ΠΎΠ±ΡΠ°Π·Π° ΡΡΠΏΡΡ
ΠΌΠ΅ Π΄Π° 'ΡΡΠΊΡΠ°ΡΠΈΡ' ΠΎΡΠ΅ 15ΠΠ.
ΠΡΠΈΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ, ΡΡΠ±ΡΠ°Π½ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ .
ΠΡΠΎΠ΅ΠΊΡΡΡ β .
ΠΠΊΠΎ Π²ΠΈ Π»ΠΈΠΏΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄Π°ΠΉΡΠ΅ Π·Π°ΡΠ²ΠΊΠ° β Ρ ΡΠ°Π΄ΠΎΡΡ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π° π ΠΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ Π² fetchy, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΠ° ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ΡΠ°ΠΏΠ½ΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π° ΠΎΡΠΏΠ°Π΄Π½Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
