තමන්ව විශ්වාස කළ කුඩා ඩොකර් පින්තූර*

["The Little Engine That Could" ඇමරිකානු ළමා සුරංගනා කතාවට යොමුව - දළ වශයෙන්. මාර්ගය]*

තමන්ව විශ්වාස කළ කුඩා ඩොකර් පින්තූර*

ඔබගේ අවශ්‍යතා සඳහා කුඩා Docker පින්තූර ස්වයංක්‍රීයව සාදා ගන්නේ කෙසේද

අසාමාන්ය උමතුව

පසුගිය මාස කිහිපය තුළ, යෙදුම තවමත් ක්‍රියාත්මක වන විට ඩොකර් රූපයක් කොපමණ කුඩා විය හැකිද යන අදහස සමඟ මම උමතු වී සිටිමි.

මට තේරෙනවා, අදහස අමුතුයි.

මම විස්තර සහ තාක්ෂණික කරුණු වලට පිවිසීමට පෙර, මෙම ගැටලුව මට මෙතරම් කරදර කළේ මන්දැයි සහ එය ඔබට අදාළ වන්නේ කෙසේද යන්න පැහැදිලි කිරීමට මම කැමැත්තෙමි.

ප්‍රමාණය වැදගත් වන්නේ ඇයි?

ඩොකර් රූපයේ අන්තර්ගතය අඩු කිරීමෙන්, අපි එමගින් දුර්වලතා ලැයිස්තුව අඩු කරමු. ඊට අමතරව, අපි පින්තූර පිරිසිදු කරන්නෙමු, මන්ද ඒවායේ යෙදුම් ධාවනය කිරීමට අවශ්‍ය දේ පමණක් අඩංගු වන බැවිනි.

තවත් එක් කුඩා වාසියක් ඇත - පින්තූර ටිකක් වේගයෙන් බාගත වේ, නමුත්, මගේ මතය අනුව, මෙය එතරම් වැදගත් නොවේ.

කරුණාකර සටහන් කරන්න: ඔබ විශාලත්වය ගැන සැලකිලිමත් වන්නේ නම්, ඇල්පයින් පෙනුම කුඩා වන අතර ඔබට ගැලපෙනු ඇත.

Distroless පින්තූර

ව්‍යාපෘතිය Distroless මූලික “ඩිස්ට්‍රොලස්” රූප තෝරා ගැනීමක් ඉදිරිපත් කරයි, ඒවායේ පැකේජ කළමනාකරුවන්, ෂෙල් වෙඩි සහ ඔබ විධාන රේඛාවේ දැකීමට පුරුදු වී ඇති වෙනත් උපයෝගිතා අඩංගු නොවේ. ප්රතිඵලයක් වශයෙන්, වැනි පැකේජ කළමනාකරුවන් භාවිතා කරන්න pip и apt ක්රියා නොකරනු ඇත:

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

Python 3 distroless image භාවිතයෙන් 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/

බහු අදියර එකලස් කිරීම

ප්රතිඵලය වන්නේ 130MB ප්රමාණයේ රූපයකි. නරක නැහැ! සංසන්දනය කිරීම සඳහා: පෙරනිමි පයිතන් රූපයේ බර 929MB, සහ "තුනී" එක (3,7-slim) - 179MB, ඇල්පයින් රූපය (3,7-alpine) 98,6MB වන අතර, උදාහරණයේ භාවිතා කරන මූලික distroless රූපය 50,9MB වේ.

පෙර උදාහරණයේදී අපි සම්පූර්ණ නාමාවලියක් පිටපත් කරන බව පෙන්වා දීම සාධාරණයි /usr/local/lib/python3.7/site-packages, අපට අවශ්‍ය නොවන පරායත්තතා අඩංගු විය හැක. පවතින සියලුම පයිතන් පාදක රූපවල ප්‍රමාණයේ වෙනස වෙනස් වන බව පැහැදිලි වුවද.

ලියන අවස්ථාව වන විට, Google distroless බොහෝ පින්තූර සඳහා සහය නොදක්වයි: Java සහ Python තවමත් පර්යේෂණාත්මක මට්ටමේ පවතින අතර Python පවතින්නේ 2,7 සහ 3,5 සඳහා පමණි.

කුඩා රූප

කුඩා රූප නිර්මාණය කිරීමේ මගේ උමතුව වෙත ආපසු.

පොදුවේ ගත් කල, මට අවශ්‍ය වූයේ ඩිස්ට්‍රොලස් රූප ගොඩනඟන්නේ කෙසේදැයි බැලීමටය. distroless ව්‍යාපෘතිය Google හි ගොඩනැගීමේ මෙවලම භාවිතා කරයි bazel. කෙසේ වෙතත්, Bazel ස්ථාපනය කිරීම සහ ඔබේම පින්තූර ලිවීමට විශාල වැඩ කොටසක් සිදු විය (සහ අවංකව කිවහොත්, රෝදය ප්‍රතිනිර්මාණය කිරීම විනෝදජනක සහ අධ්‍යාපනික වේ). කුඩා රූප නිර්මාණය කිරීම සරල කිරීමට මට අවශ්‍ය විය: රූපයක් නිර්මාණය කිරීමේ ක්‍රියාව අතිශයින්ම සරල විය යුතුය, බානල්. ඔබ සඳහා වින්‍යාස ගොනු නොමැති වන පරිදි, කොන්සෝලයේ එක් පේළියක් පමණි: просто собрать образ для <приложение>.

එබැවින්, ඔබට ඔබේම පින්තූර නිර්මාණය කිරීමට අවශ්‍ය නම්, දැනගන්න: එවැනි අද්විතීය ඩොකර් රූපයක් තිබේ, scratch. සීරීම් යනු “හිස්” රූපයකි, එහි ගොනු නොමැත, එය පෙරනිමියෙන් බර වුවද - wow! - බයිට් 77 යි.

FROM scratch

සීරීම් රූපය

සීරීම් රූපයක අදහස නම්, ඔබට සත්කාරක යන්ත්‍රයෙන් ඕනෑම පරායත්තයක් එයට පිටපත් කළ හැකි අතර ඒවා ඩොකර්ෆයිල් එකක් තුළ භාවිතා කළ හැකිය (මෙය ඒවා පිටපත් කිරීම වැනිය. apt සහ මුල සිට ස්ථාපනය කරන්න), හෝ පසුව ඩොකර් රූපය ද්‍රව්‍යකරණය වූ විට. මෙය ඔබට ඩොකර් කන්ටේනරයේ අන්තර්ගතය සම්පූර්ණයෙන්ම පාලනය කිරීමට ඉඩ සලසයි, එමඟින් රූපයේ ප්‍රමාණය සම්පූර්ණයෙන්ම පාලනය කරයි.

දැන් අපි කෙසේ හෝ මෙම පරායත්තතා එකතු කර ගත යුතුයි. වැනි පවතින මෙවලම් apt ඔබට පැකේජ බාගත කිරීමට ඉඩ සලසයි, නමුත් ඒවා වත්මන් යන්ත්‍රයට බැඳී ඇති අතර, සියල්ලට පසු, Windows හෝ MacOS සඳහා සහය නොදක්වයි.

එබැවින් හැකි කුඩාම ප්‍රමාණයේ මූලික රූපයක් ස්වයංක්‍රීයව ගොඩනඟා ඕනෑම යෙදුමක් ක්‍රියාත්මක කරන මගේම මෙවලමක් තැනීමට මම කටයුතු කළෙමි. මම Ubuntu/Debian පැකේජ භාවිතා කර, තේරීමක් සිදු කළෙමි (නිදසුනෙන් කෙලින්ම පැකේජ ලබා ගැනීම) සහ ඒවායේ පරායත්තතා පුනරාවර්තන ලෙස සොයා ගත්තෙමි. මෙම වැඩසටහන මඟින් පැකේජයේ නවතම ස්ථාවර අනුවාදය ස්වයංක්‍රීයව බාගත කිරීමට නියමිතව තිබූ අතර, හැකිතාක් දුරට ආරක්ෂක අවදානම් අවම කරයි.

මම මෙවලම නම් කළා fetchy, මොකද එයා... හොයාගෙන ගේනවා... අවශ්‍ය දේ [ඉංග්‍රීසියෙන් "ගෙන එන්න", "ගෙන එන්න" - දළ වශයෙන්. මාර්ගය]. මෙවලම විධාන රේඛා අතුරුමුහුණතක් හරහා ක්‍රියා කරයි, නමුත් ඒ සමඟම API ලබා දෙයි.

භාවිතා කරමින් රූපයක් එකලස් කිරීමට fetchy (මෙවර පයිතන් රූපයක් ගනිමු), ඔබට අවශ්‍ය වන්නේ මේ ආකාරයට CLI භාවිතා කිරීමයි: fetchy dockerize python. ඔබෙන් ඉලක්ක මෙහෙයුම් පද්ධතිය සහ කේත නාමය ඉල්ලා සිටිය හැක fetchy දැනට භාවිතා කරන්නේ Debian සහ Ubuntu මත පදනම් වූ පැකේජ පමණි.

දැන් ඔබට කිසිසේත් අවශ්‍ය නොවන පරායත්තයන් තෝරා ගත හැකිය (අපගේ සන්දර්භය තුළ) සහ ඒවා බැහැර කරන්න. උදාහරණයක් ලෙස, Python perl මත රඳා පවතී, නමුත් එය Perl ස්ථාපනය නොකර හොඳින් ක්‍රියා කරයි.

ප්රතිඵල

විධානය භාවිතයෙන් නිර්මාණය කරන ලද පයිතන් රූපය fetchy dockerize python3.5 බර 35MB පමණි (අනාගතයේදී එය තවත් සැහැල්ලු කළ හැකි බව මට විශ්වාසයි). ඩිස්ට්‍රොලස් රූපයෙන් තවත් WW 15 ක් ඉවත් කිරීමට අපට හැකි වූ බව පෙනේ.

මෙතෙක් එකතු කර ඇති සියලුම පින්තූර ඔබට දැක ගත හැකිය මෙහි.

ව්යාපෘතිය - මෙහි.

ඔබට විශේෂාංග නොමැති නම්, ඉල්ලීමක් සාදන්න - උදව් කිරීමට මම සතුටු වෙමි :) ඊටත් වඩා, මම දැනට අනෙකුත් පැකේජ කළමනාකරුවන් ෆෙචින් වෙත ඒකාබද්ධ කිරීමට කටයුතු කරමින් සිටිමි, එවිට බහු-අදියර ගොඩනැගීම් අවශ්‍ය නොවේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න