Өзүнө ишенген кичинекей Докер сүрөттөрү*

[америкалык балдар жомогуна шилтеме, "Мүмкүн болгон кичинекей мотор" - болжол менен. тилке]*

Өзүнө ишенген кичинекей Докер сүрөттөрү*

Сиздин муктаждыктарыңыз үчүн кичинекей Docker сүрөттөрүн кантип автоматтык түрдө түзсө болот

Unstanding Obsession

Акыркы эки айдын ичинде мен Docker сүрөтү канчалык кичинекей болушу мүмкүн жана дагы эле тиркеме иштеп жатабы деген ой менен алпурдум.

Мен түшүнөм, идея кызык экен.

Мен майда-чүйдөсүнө чейин жана техникалык жагына чейин, мен бул көйгөй мени эмне үчүн мынчалык тынчсыздандырганын түшүндүрүп кетким келет, жана ал сага кандай тиешеси бар.

Эмне үчүн өлчөмү маанилүү

Docker сүрөтүнүн мазмунун кыскартуу менен, биз алсыздыктардын тизмесин азайтабыз. Кошумчалай кетсек, биз сүрөттөрдү тазараак кылабыз, анткени алар тиркемелерди иштетүү үчүн керектүү нерселерди гана камтыйт.

Дагы бир кичинекей артыкчылыгы бар - сүрөттөр бир аз тезирээк жүктөлөт, бирок, менин оюмча, бул анчалык деле маанилүү эмес.

Көңүл буруңуз: Эгер сиз өлчөмгө тынчсызданып жатсаңыз, Альп тоосунун сырткы көрүнүшү кичинекей жана сизге туура келиши мүмкүн.

Дистролсуз сүрөттөр

Project Distroless негизги "дистролсуз" сүрөттөрдүн тандоосун сунуштайт, алар пакет менеджерлерин, кабыктарды жана буйрук сабында көрүүгө көнүп калган башка утилиталарды камтыбайт. Натыйжада, сыяктуу пакет менеджерлерин колдонуңуз pip и apt болбойт:

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

Python 3 дистролсуз сүрөтүн колдонуп Dockerfile

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 МБ өлчөмүндөгү сүрөт. Жаман эмес! Салыштыруу үчүн: демейки Python сүрөтүнүн салмагы 929 МБ, ал эми "ичке" (3,7-slim) - 179 МБ, альп сүрөтү (3,7-alpine) 98,6 МБ, ал эми мисалда колдонулган базалык дистросуз сүрөт 50,9 МБ.

Мурунку мисалда биз толук каталогду көчүрүп жатканыбызды белгилей кетүү туура /usr/local/lib/python3.7/site-packages, ал бизге кереги жок көз карандылыктарды камтышы мүмкүн. Бардык учурдагы Python базалык сүрөттөрүнүн өлчөмү айырмасы ар кандай экени айкын болсо да.

Жазуу учурунда Google distroless көптөгөн сүрөттөрдү колдобойт: Java жана Python дагы эле эксперименталдык стадияда, ал эми Python 2,7 жана 3,5 үчүн гана бар.

Кичинекей сүрөттөр

Кичинекей сүрөттөрдү жаратууга болгон кызыгуума кайтуу.

Жалпысынан, мен дистросуз сүрөттөр кандайча курулганын көргүм келди. Дистролсуз долбоор Google'дун куруу куралын колдонот bazel. Бирок, Базелди орнотуу жана өзүңүздүн сүрөттөрүңүздү жазуу көп эмгекти талап кылды (чынын айтсам, дөңгөлөктү кайра ойлоп табуу кызыктуу жана билим берүүчү). Мен кичинекей сүрөттөрдү түзүүнү жөнөкөйлөткүм келди: сүрөттү түзүү актысы өтө жөнөкөй болушу керек, баналдык. Сиз үчүн конфигурация файлдары жок болушу үчүн, консолдо бир гана сап: просто собрать образ для <приложение>.

Ошентип, эгер сиз өзүңүздүн сүрөттөрүңүздү жараткыңыз келсе, анда билиңиз: мындай уникалдуу докер сүрөтү бар, scratch. Scratch - бул "бош" сүрөт, анда эч кандай файлдар жок, бирок демейки боюнча салмагы бар - wow! - 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 орнотулбай эле жакшы иштейт.

натыйжалары

Python сүрөтү буйрук менен түзүлгөн fetchy dockerize python3.5 салмагы болгону 35 МБ (келечекте аны андан да жеңилирээк жасоого болот деп ишенем). Көрсө, биз дистросуз сүрөттөлүштөн дагы 15 WW кыркып алдык.

Сиз буга чейин чогултулган бардык сүрөттөрдү көрө аласыз бул жерде.

Долбоор - бул жерде.

Эгер сизде функциялар жок болсо, жөн гана сураныч түзүңүз - мен жардам берүүгө кубанычта болом :) Андан да көп баскычтуу куруунун кереги жок болушу үчүн, мен учурда башка пакет менеджерлерин алып келүүчүгө интеграциялоонун үстүндө иштеп жатам.

Source: www.habr.com

Комментарий кошуу