[ΡΠΏΠ°ΡΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠ°ΡΠ° Π΄Π΅ΡΡΠΊΠ° Π±Π°ΡΠΊΠ° βΠΠ°Π»ΠΈΠΎΡ ΠΌΠΎΡΠΎΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅β - ΠΏΡΠΈΠ±Π». Π»Π΅Π½ΡΠ°]*
ΠΠ°ΠΊΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΌΠ°Π»ΠΈ Docker ΡΠ»ΠΈΠΊΠΈ Π·Π° Π²Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ
ΠΠ΅Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½Π° ΠΎΠΏΡΠ΅ΡΠΈΡΠ°
ΠΠΎ ΠΈΠ·ΠΌΠΈΠ½Π°ΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠ΅ΡΠ΅ΡΠΈ, Π±Π΅Π² ΠΎΠΏΡΠ΅Π΄Π½Π°Ρ ΡΠΎ ΡΠΎΠ° ΠΊΠΎΠ»ΠΊΡ ΠΌΠ°Π»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Docker ΠΈ ΡΓ¨ ΡΡΡΠ΅ Π΄Π° ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°?
Π Π°Π·Π±ΠΈΡΠ°ΠΌ, ΠΈΠ΄Π΅ΡΠ°ΡΠ° Π΅ ΡΡΠ΄Π½Π°.
ΠΡΠ΅Π΄ Π΄Π° Π½Π°Π²Π»Π΅Π³ΡΠ²Π°ΠΌ Π²ΠΎ Π΄Π΅ΡΠ°Π»ΠΈΡΠ΅ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ, Π±ΠΈ ΡΠ°ΠΊΠ°Π» Π΄Π° ΠΎΠ±ΡΠ°ΡΠ½Π°ΠΌ Π·ΠΎΡΡΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠ΅ Π²ΠΎΠ·Π½Π΅ΠΌΠΈΡΠΈ ΡΠΎΠ»ΠΊΡ ΠΌΠ½ΠΎΠ³Ρ ΠΈ ΠΊΠ°ΠΊΠΎ Π²Π΅ Π·Π°ΡΠ΅Π³Π° Π²Π°Ρ.
ΠΠΎΡΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π΅ Π²Π°ΠΆΠ½Π°
Π‘ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π½Π° Docker, ΡΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΌΠ΅ Π»ΠΈΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠΏΡΡΡΠΈ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Π³ΠΈ ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΏΠΎΡΠΈΡΡΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΈΠ΅ Π³ΠΎ ΡΠΎΠ΄ΡΠΆΠ°Ρ ΡΠ°ΠΌΠΎ ΠΎΠ½Π° ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅.
ΠΠΌΠ° ΡΡΡΠ΅ Π΅Π΄Π½Π° ΠΌΠ°Π»Π° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ - ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ°Π°Ρ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ±ΡΠ·ΠΎ, Π½ΠΎ, ΡΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ Π²Π°ΠΆΠ½ΠΎ.
ΠΠ΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ Π·Π°ΠΏΠΎΠΌΠ½Π΅ΡΠ΅: ΠΠΊΠΎ ΡΡΠ΅ Π·Π°Π³ΡΠΈΠΆΠ΅Π½ΠΈ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ°, ΡΠ°ΠΌΠΈΡΠ΅ Alpine ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ ΠΌΠ°Π»ΠΈ ΠΈ Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ΅ Π²ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π°Ρ.
Π‘Π»ΠΈΠΊΠΈ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°
pip
ΠΈ apt
Π½Π΅ΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ:
FROM gcr.io/distroless/python3
RUN pip3 install numpy
ΠΠΎΠΊΠ΅Ρ-Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ»ΠΈΠΊΠ° Π±Π΅Π· Π΄ΠΈΡΡΡΠΎΠ»Π° Π½Π° 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 ΡΠ΅ΠΆΠΈ 929 MB, Π° βΠΏΠΎΡΠ΅Π½ΠΊΠΈΠΎΡβ (3,7-slim
) - 179 MB, Π°Π»ΠΏΡΠΊΠ° ΡΠ»ΠΈΠΊΠ° (3,7-alpine
) Π΅ 98,6 MB, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅Π½Π° Π²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π΅ 50,9 MB.
ΠΡΠ°Π²Π΅Π΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΡΡΠ°ΠΊΠ½Π΅ Π΄Π΅ΠΊΠ° Π²ΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π» Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ /usr/local/lib/python3.7/site-packages
, ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΡΡΠΎ Π½Π΅ Π½ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ. ΠΠ°ΠΊΠΎ Π΅ ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠ° ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ Π½Π° ΠΠ°ΡΡΠΎΠ½ Π²Π°ΡΠΈΡΠ°.
ΠΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅, Google distroless Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΡΠ»ΠΈΠΊΠΈ: Java ΠΈ Python ΡΓ¨ ΡΡΡΠ΅ ΡΠ΅ Π²ΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΡΠ°Π·Π°, Π° Python ΠΏΠΎΡΡΠΎΠΈ ΡΠ°ΠΌΠΎ Π·Π° 2,7 ΠΈ 3,5.
ΠΠ°Π»ΠΈ ΡΠ»ΠΈΠΊΠΈ
ΠΠ°Π·Π°Π΄ Π½Π° ΠΌΠΎΡΠ°ΡΠ° ΠΎΠΏΡΠ΅ΡΠΈΡΠ° ΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΌΠ°Π»ΠΈ ΡΠ»ΠΈΠΊΠΈ.
ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΡΠ°ΠΊΠ°Π² Π΄Π° Π²ΠΈΠ΄Π°ΠΌ ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ°Π°Ρ ΡΠ»ΠΈΠΊΠΈ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°. ΠΡΠΎΠ΅ΠΊΡΠΎΡ Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° Google bazel
. Π‘Π΅ΠΏΠ°ΠΊ, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Bazel ΠΈ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ Π±Π°ΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π±ΠΎΡΠ° (ΠΈ Π΄Π° Π±ΠΈΠ΄Π°ΠΌ ΠΈΡΠΊΡΠ΅Π½, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΌΠΈΡΠ»ΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠΊΠ°Π»ΠΎΡΠΎ Π΅ Π·Π°Π±Π°Π²Π½ΠΎ ΠΈ Π΅Π΄ΡΠΊΠ°ΡΠΈΠ²Π½ΠΎ). Π‘Π°ΠΊΠ°Π² Π΄Π° Π³ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠΌΠ°Π»ΠΈ ΡΠ»ΠΈΠΊΠΈ: ΡΠΈΠ½ΠΎΡ Π½Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½, Π±Π°Π½Π°Π»Π½ΠΈ. ΠΠ° Π΄Π° Π½Π΅ΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π·Π° Π²Π°Ρ, ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°: ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ <ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅>
.
ΠΠ½Π°ΡΠΈ, Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠ»ΠΈΠΊΠΈ, ΡΠΎΠ³Π°Ρ Π·Π½Π°ΡΡΠ΅: ΠΏΠΎΡΡΠΎΠΈ ΡΠ°ΠΊΠ²Π° ΡΠ½ΠΈΠΊΠ°ΡΠ½Π° Π΄ΠΎΠΊΠ΅Ρ ΡΠ»ΠΈΠΊΠ°, 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.
ΠΠ°ΠΎΠ΄ΠΈ
ΠΠ°ΡΡΠΎΠ½ ΡΠ»ΠΈΠΊΠ° ΡΠΎΠ·Π΄Π°Π΄Π΅Π½Π° ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° fetchy dockerize python3.5
ΡΠ΅ΠΆΠΈ ΡΠ°ΠΌΠΎ 35MB (ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ Π΄Π΅ΠΊΠ° Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΡΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ΅Π½). ΠΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΡΠΏΠ΅Π°Π²ΠΌΠ΅ Π΄Π° ΠΈΠ·Π±ΡΠΈΡΠΈΠΌΠ΅ ΡΡΡΠ΅ 15 WW ΠΎΠ΄ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π±Π΅Π· Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΈΡΠ΅ Π΄ΠΎΡΠ΅Π³Π° ΡΠΎΠ±ΡΠ°Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ
ΠΡΠΎΠ΅ΠΊΡ -
ΠΠΊΠΎ Π²ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π°Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΌΠΎ Π½Π°ΠΏΡΠ°Π²Π΅ΡΠ΅ Π±Π°ΡΠ°ΡΠ΅ - ΡΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°ΠΌ :) Π£ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅, ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΠΌ Π½Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π²ΠΎ fetchy, Π·Π° Π΄Π° Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π³ΡΠ°Π΄Π±ΠΈ.
ΠΠ·Π²ΠΎΡ: www.habr.com