[ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠ° ΠΊΡΠΌ Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠ°ΡΠ° Π΄Π΅ΡΡΠΊΠ° ΠΏΡΠΈΠΊΠ°Π·ΠΊΠ° βΠΠ°Π»ΠΊΠΈΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅β β ΠΏΡΠΈΠ±Π». ΠΏΠ»Π°ΡΠ½ΠΎ]*
ΠΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΌΠ°Π»ΠΊΠΈ Docker ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° Π²Π°ΡΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ
ΠΠ΅ΠΎΠ±ΠΈΡΠ°ΠΉΠ½Π° ΠΌΠ°Π½ΠΈΡ
ΠΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ΅ΡΠ΅ΡΠ° Π±ΡΡ ΠΎΠ±ΡΠ΅Π±Π΅Π½ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ?
Π Π°Π·Π±ΠΈΡΠ°ΠΌ, ΠΈΠ΄Π΅ΡΡΠ° Π΅ ΡΡΡΠ°Π½Π½Π°.
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°Π²Π»ΡΠ·Π° Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΠΎΠ±ΡΡΠ½Ρ Π·Π°ΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠ΅ Π±Π΅Π·ΠΏΠΎΠΊΠΎΠΈ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠ°ΠΊ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π·Π° Π²Π°Ρ.
ΠΠ°ΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΡ ΠΈΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
Π§ΡΠ΅Π· Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker, Π½ΠΈΠ΅ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΌΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΠΏΠΎ-ΡΠΈΡΡΠΈ, Π·Π°ΡΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΌΠ° ΠΎΡΠ΅ Π΅Π΄Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ - ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΡΡ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ, Π½ΠΎ ΡΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ.
ΠΠΎΠ»Ρ, ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ Π·Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠ°ΠΌΠΈΡΡ Π²ΡΠ½ΡΠ΅Π½ Π²ΠΈΠ΄ Π½Π° Alpine Π΅ ΠΌΠ°Π»ΡΠΊ ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠ°ΡΠ½Π΅.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡ
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/
ΠΠ½ΠΎΠ³ΠΎΠ΅ΡΠ°ΠΏΠ΅Π½ ΠΌΠΎΠ½ΡΠ°ΠΆ
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅Ρ 130 MB. ΠΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΡΠΎ! ΠΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅: ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Python ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ΠΆΠΈ 929MB, Π° βΠΏΠΎ-ΡΡΠ½ΠΊΠΎΡΠΎβ (3,7-slim
) - 179MB, Π°Π»ΠΏΠΈΠΉΡΠΊΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (3,7-alpine
) Π΅ 98,6 MB, Π΄ΠΎΠΊΠ°ΡΠΎ Π±Π°Π·ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π΅ 50,9 MB.
Π‘ΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΡΠ»Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /usr/local/lib/python3.7/site-packages
, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π΅ ΡΡΠ½ΠΎ, ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π² ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ Π±Π°Π·ΠΎΠ²ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Python Π²Π°ΡΠΈΡΠ°.
ΠΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅ Google distroless Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ: Java ΠΈ Python Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ Π΅ΡΠ°ΠΏ, Π° Python ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠ°ΠΌΠΎ Π·Π° 2,7 ΠΈ 3,5.
ΠΠ°Π»ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
ΠΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ ΠΌΠ°Π½ΠΈΡΡΠ° ΠΌΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌ ΠΌΠ°Π»ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΈΡΠΊΠ°Ρ
Π΄Π° Π²ΠΈΠ΄Ρ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡ. ΠΡΠΎΠ΅ΠΊΡΡΡ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Google bazel
. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Bazel ΠΈ ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π°ΡΠ΅ ΠΎΡΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ° (ΠΈ ΡΠ΅ΡΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΡΠ΅ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ»Π΅Π»ΠΎΡΠΎ Π΅ Π·Π°Π±Π°Π²Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ). ΠΡΠΊΠ°Ρ
Π΄Π° ΠΎΠΏΡΠΎΡΡΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ: Π°ΠΊΡΡΡ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡ, Π±Π°Π½Π°Π»Π½ΠΎ. ΠΠ° Π΄Π° Π½ΡΠΌΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π²Π°Ρ, ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΡΠ΅Π΄ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°: ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ <ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅>
.
Π’Π°ΠΊΠ° ΡΠ΅, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ³Π°Π²Π° Π·Π½Π°ΠΉΡΠ΅: ΠΈΠΌΠ° ΡΠ°ΠΊΠΎΠ²Π° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, scratch
. Scratch Π΅ βΠΏΡΠ°Π·Π½ΠΎβ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π² Π½Π΅Π³ΠΎ Π½ΡΠΌΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ΅ΠΆΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ - ΡΠ°Ρ! - 77 Π±Π°ΠΉΡΠ°.
FROM scratch
Π‘ΠΊΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΠ΄Π΅ΡΡΠ° Π½Π° ΡΠΊΡΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Ρ
ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π² Π½Π΅Π³ΠΎ ΠΈ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π² Dockerfile (ΡΠΎΠ²Π° Π΅ ΠΊΠ°ΡΠΎ Π΄Π° Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π² apt
ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡ Π½ΡΠ»Π°ΡΠ°), ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Docker Π±ΡΠ΄Π΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ. Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° Docker ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ΅Π·ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ 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