ΠšΡ€ΠΎΡ…ΠΎΡ‚Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ€ΠΈΠ»ΠΈ Π² сСбя*

[отсылка ΠΊ амСриканской дСтской сказкС «ΠœΠ°Π»Π΅Π½ΡŒΠΊΠΈΠΉ ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Ρ€ΠΈΠ» Π² сСбя » («The Little Engine That Could») β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.]*

ΠšΡ€ΠΎΡ…ΠΎΡ‚Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ€ΠΈΠ»ΠΈ Π² сСбя*

Как автомагичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΡ€ΠΎΡ…ΠΎΡ‚Π½Ρ‹Π΅ docker-ΠΎΠ±Ρ€Π°Π·Ρ‹ для своих Π½ΡƒΠΆΠ΄

НСобычная ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΡΡ‚ΡŒ

ПослСдниС ΠΏΠ°Ρ€Ρƒ мСсяцСв я Π±Ρ‹Π» ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌ навязчивой ΠΈΠ΄Π΅Π΅ΠΉ: насколько ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Docker, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ?

Понимаю, идСя странная.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ тСхничСскиС Π΄Π΅Π±Ρ€ΠΈ, я Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Π΅ΠΌ эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊ мСня Π·Π°Ρ†Π΅ΠΏΠΈΠ»Π°, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° касаСтся вас.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Бокращая содСрТимоС ΠΎΠ±Ρ€Π°Π·Π° Docker, ΠΌΡ‹ Ρ‚Π΅ΠΌ самым сокращаСм список уязвимостСй. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·Ρ‹ Ρ‡ΠΈΡ‰Π΅, вСдь ΠΎΠ½ΠΈ содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ нСбольшоС прСимущСство β€” ΠΎΠ±Ρ€Π°Π·Ρ‹ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡ΡƒΡ‚ΠΎΡ‡ΠΊΡƒ быстрСС, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΌΠ½Π΅, это Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Π²Π°ΠΆΠ½ΠΎ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если вас Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Π·Ρ‹ Alpine сами ΠΏΠΎ сСбС ΠΌΠ°Π»Ρ‹ ΠΈ навСрняка ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ Π²Π°ΠΌ.

Distroless-ΠΎΠ±Ρ€Π°Π·Ρ‹

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Distroless ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΡƒ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… «distroless»-ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΎΠ½ΠΈ Π½Π΅ содСрТат ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ pip ΠΈ apt Π½Π΅ получится:

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

Dockerfile, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ distroless-ΠΎΠ±Ρ€Π°Π· 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

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/

ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Π°ΠΏΠ½Π°Ρ сборка

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся ΠΎΠ±Ρ€Π°Π· Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 130ΠœΠ’. НС Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ! Для сравнСния: ΠΎΠ±Ρ€Π°Π· Python ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вСсит 929ΠœΠ’, Π° «ΠΏΠΎΡ…ΡƒΠ΄Π΅Π²ΡˆΠΈΠΉ» (3,7-slim) β€” 179ΠœΠ’, ΠΎΠ±Ρ€Π°Π· alpine (3,7-alpine) β€” 98,6MB, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ distroless-ΠΎΠ±Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, β€” 50,9ΠœΠ’.

МоТно справСдливо ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Ρ†Π΅Π»Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /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