Тасвирҳои ночизи Docker, ки ба худ боварӣ доштанд *

[ истинод ба афсонаи бачагонаи амрикоии «Мотораки хурдакак, ки метавонист» - тахминан. хати]*

Тасвирҳои ночизи Docker, ки ба худ боварӣ доштанд *

Чӣ тавр ба таври худкор тасвирҳои хурди Docker-ро барои эҳтиёҷоти худ эҷод кардан мумкин аст

Обсессии ғайриоддӣ

Дар тӯли ду моҳи охир ман ба он ғамгин будам, ки тасвири Docker то чӣ андоза хурд буда метавонад ва ҳоло ҳам барнома кор мекунад?

Ман мефаҳмам, идея аҷиб аст.

Пеш аз он ки ба тафсилот ва техникӣ ворид шавам, мехостам шарҳ диҳам, ки чаро ин мушкилот маро ин қадар ба ташвиш овардааст ва он чӣ ба шумо дахл дорад.

Чаро андоза муҳим аст

Бо кам кардани мундариҷаи тасвири Docker, мо ба ин васила рӯйхати осебпазириро кам мекунем. Илова бар ин, мо тасвирҳоро тозатар мегардонем, зеро онҳо танҳо он чизеро дар бар мегиранд, ки барои иҷрои барномаҳо лозиманд.

Боз як бартарии хурд вуҷуд дорад - тасвирҳо каме зудтар зеркашӣ карда мешаванд, аммо ба андешаи ман, ин он қадар муҳим нест.

Лутфан таваҷҷӯҳ намоед: Агар шумо дар бораи андоза нигарон бошед, намуди Alpine хурд аст ва эҳтимол ба шумо мувофиқат мекунад.

Тасвирҳои беасос

Лоиҳаи 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

Пип дар тасвир нест

Одатан, ин мушкилот бо сохтани бисёрмарҳила ҳал карда мешавад:

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. Бо вуҷуди ин, насб кардани 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 вазнаш ҳамагӣ 35 МБ (ман беш аз он боварӣ дорам, ки дар оянда онро боз ҳам сабуктар кардан мумкин аст). Маълум мешавад, ки мо тавонистем боз 15 WW-ро аз тасвири бефосила канда кунем.

Шумо метавонед ҳамаи тасвирҳоеро, ки то имрӯз ҷамъ оварда шудаанд, дидан кунед дар ин ҷо.

Лоиҳа - дар ин ҷо.

Агар шумо хусусиятҳо надошта бошед, танҳо дархост эҷод кунед - ман бо камоли майл кӯмак хоҳам кард :) Ҳатто бештар, ман дар айни замон дар бораи ҳамгиро кардани дигар менеҷерҳои бастаҳо ба фоҷиа кор карда истодаам, то ба сохтани бисёрмарҳила эҳтиёҷ надошта бошад.

Манбаъ: will.com

Илова Эзоҳ