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

ඔබගේ අවශ්යතා සඳහා කුඩා Docker පින්තූර ස්වයංක්රීයව සාදා ගන්නේ කෙසේද
අසාමාන්ය උමතුව
පසුගිය මාස කිහිපය තුළ, යෙදුම තවමත් ක්රියාත්මක වන විට ඩොකර් රූපයක් කොපමණ කුඩා විය හැකිද යන අදහස සමඟ මම උමතු වී සිටිමි.
මට තේරෙනවා, අදහස අමුතුයි.
මම විස්තර සහ තාක්ෂණික කරුණු වලට පිවිසීමට පෙර, මෙම ගැටලුව මට මෙතරම් කරදර කළේ මන්දැයි සහ එය ඔබට අදාළ වන්නේ කෙසේද යන්න පැහැදිලි කිරීමට මම කැමැත්තෙමි.
ප්රමාණය වැදගත් වන්නේ ඇයි?
ඩොකර් රූපයේ අන්තර්ගතය අඩු කිරීමෙන්, අපි එමගින් දුර්වලතා ලැයිස්තුව අඩු කරමු. ඊට අමතරව, අපි පින්තූර පිරිසිදු කරන්නෙමු, මන්ද ඒවායේ යෙදුම් ධාවනය කිරීමට අවශ්ය දේ පමණක් අඩංගු වන බැවිනි.
තවත් එක් කුඩා වාසියක් ඇත - පින්තූර ටිකක් වේගයෙන් බාගත වේ, නමුත්, මගේ මතය අනුව, මෙය එතරම් වැදගත් නොවේ.
කරුණාකර සටහන් කරන්න: ඔබ විශාලත්වය ගැන සැලකිලිමත් වන්නේ නම්, ඇල්පයින් පෙනුම කුඩා වන අතර ඔබට ගැලපෙනු ඇත.
Distroless පින්තූර
මූලික “ඩිස්ට්රොලස්” රූප තෝරා ගැනීමක් ඉදිරිපත් කරයි, ඒවායේ පැකේජ කළමනාකරුවන්, ෂෙල් වෙඩි සහ ඔබ විධාන රේඛාවේ දැකීමට පුරුදු වී ඇති වෙනත් උපයෝගිතා අඩංගු නොවේ. ප්රතිඵලයක් වශයෙන්, වැනි පැකේජ කළමනාකරුවන් භාවිතා කරන්න pip и apt ක්රියා නොකරනු ඇත:
FROM gcr.io/distroless/python3
RUN pip3 install numpyPython 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
