Тини Доцкер слике које верују у себе*

[референца на америчку дечију бајку „Мали мотор који би могао“ – прибл. лане]*

Тини Доцкер слике које верују у себе*

Како аутоматски креирати мале Доцкер слике за своје потребе

Унусуал Обсессион

Последњих неколико месеци био сам опседнут тиме колико Доцкер слика може бити мала, а да апликација још увек ради?

Разумем, идеја је чудна.

Пре него што уђем у детаље и техничке детаље, желео бих да објасним зашто ме је овај проблем толико мучио и како се тиче вас.

Зашто је величина важна

Смањивањем садржаја Доцкер слике, тиме смањујемо листу рањивости. Поред тога, чинимо слике чистијим, јер садрже само оно што је потребно за покретање апликација.

Постоји још једна мала предност - слике се преузимају мало брже, али, по мом мишљењу, то није толико важно.

Имајте на уму: Ако сте забринути због величине, сами Алпине изгледи су мали и вероватно ће вам одговарати.

Слике без дистроле

Пројецт Дистролесс нуди избор основних „дистролесс“ слика, не садрже менаџере пакета, шкољке и друге услужне програме које сте навикли да видите на командној линији. Као резултат, користите менаџере пакета као што су pip и apt неће радити:

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

Доцкерфиле користећи Питхон 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МБ. Није тако лоше! За поређење: подразумевана Питхон слика је тешка 929МБ, а „тања“ (3,7-slim) - 179МБ, алпска слика (3,7-alpine) је 98,6 МБ, док је основна слика без дистроле коришћена у примеру 50,9 МБ.

Поштено је истаћи да у претходном примеру копирамо цео директоријум /usr/local/lib/python3.7/site-packages, који може да садржи зависности које нам нису потребне. Иако је јасно да разлика у величини свих постојећих Питхон основних слика варира.

У време писања овог текста, Гоогле дистролесс не подржава много слика: Јава и Питхон су још увек у експерименталној фази, а Питхон постоји само за 2,7 и 3,5.

Мале слике

Да се ​​вратим на моју опсесију стварањем малих слика.

Генерално, желео сам да видим како се конструишу слике без дистроле. Пројекат без дистроле користи Гоогле-ов алат за прављење bazel. Међутим, инсталирање Базела и писање сопствених слика захтевало је много посла (и да будем искрен, поновно измишљање точка је забавно и поучно). Желео сам да поједноставим креирање мањих слика: чин креирања слике треба да буде крајње једноставан, баналан. Тако да нема конфигурационих датотека за вас, само један ред у конзоли: просто собрать образ для <приложение>.

Дакле, ако желите да креирате сопствене слике, знајте: постоји тако јединствена доцкер слика, scratch. Сцратцх је „празна“ слика, у њој нема датотека, иако је подразумевано тешка - вау! - 77 бајтова.

FROM scratch

Сцратцх имаге

Идеја сцратцх слике је да можете копирати све зависности са хост машине у њу и или их користити унутар Доцкерфиле-а (ово је као да их копирате у apt и инсталирајте од нуле), или касније када се Доцкер слика материјализује. Ово вам омогућава да у потпуности контролишете садржај Доцкер контејнера и тако потпуно контролишете величину слике.

Сада морамо некако да прикупимо ове зависности. Постојећи алати попут apt омогућавају преузимање пакета, али су они везани за тренутну машину и, на крају крајева, не подржавају Виндовс или МацОС.

Зато сам кренуо да направим сопствени алат који би аутоматски направио основну слику најмање могуће величине и такође покренуо било коју апликацију. Користио сам Убунту/Дебиан пакете, направио селекцију (преузимање пакета директно из спремишта) и рекурзивно пронашао њихове зависности. Програм је требало да аутоматски преузме најновију стабилну верзију пакета, минимизирајући безбедносне ризике што је више могуће.

Дао сам име алату fetchy, јер он... нађе и донесе... шта треба [из енглеског „донеси“, „донеси“ - прибл. лане]. Алат ради преко интерфејса командне линије, али у исто време нуди АПИ.

Да бисте саставили слику користећи fetchy (узмимо Питхон слику овог пута), само треба да користите ЦЛИ овако: fetchy dockerize python. Од вас ће се можда тражити циљни оперативни систем и кодно име јер fetchy тренутно користи само пакете засноване на Дебиан-у и Убунту-у.

Сада можете изабрати које зависности уопште нису потребне (у нашем контексту) и искључити их. На пример, Питхон зависи од Перл-а, иако ради добро без инсталираног Перла.

Налази

Питхон слика креирана помоћу команде fetchy dockerize python3.5 тежак је само 35МБ (више сам него сигуран да у будућности може да буде још лакши). Испоставило се да смо успели да обријемо још 15 ВВ са слике без дистрола.

Можете видети све до сада прикупљене слике овде.

Пројекат - овде.

Ако вам недостају функције, само направите захтев - радо ћу вам помоћи :) Штавише, тренутно радим на интеграцији других менаџера пакета у фетцхи, тако да нема потребе за вишестепеним буилдовима.

Извор: ввв.хабр.цом

Додај коментар