["தி லிட்டில் எஞ்சின் தட் குட்" என்ற அமெரிக்க குழந்தைகளின் விசித்திரக் கதைக்கான குறிப்பு - தோராயமாக. பாதை]*

உங்கள் தேவைகளுக்காக சிறிய டோக்கர் படங்களை தானாக உருவாக்குவது எப்படி
அசாதாரண தொல்லை
கடந்த இரண்டு மாதங்களாக, டோக்கர் படம் எவ்வளவு சிறியதாக இருக்க வேண்டும் என்பதில் நான் ஆர்வமாக இருந்தேன், இன்னும் பயன்பாடு இயங்குகிறதா?
எனக்கு புரிகிறது, யோசனை விசித்திரமானது.
நான் விவரங்கள் மற்றும் தொழில்நுட்பங்களுக்குள் செல்வதற்கு முன், இந்த பிரச்சனை ஏன் என்னை மிகவும் தொந்தரவு செய்தது, அது உங்களை எவ்வாறு பாதிக்கிறது என்பதை விளக்க விரும்புகிறேன்.
ஏன் அளவு முக்கியமானது
டோக்கர் படத்தின் உள்ளடக்கங்களைக் குறைப்பதன் மூலம், பாதிப்புகளின் பட்டியலைக் குறைக்கிறோம். கூடுதலாக, நாங்கள் படங்களை சுத்தமாக்குகிறோம், ஏனெனில் அவை பயன்பாடுகளை இயக்குவதற்குத் தேவையானவை மட்டுமே கொண்டிருக்கின்றன.
இன்னும் ஒரு சிறிய நன்மை உள்ளது - படங்கள் கொஞ்சம் வேகமாக பதிவிறக்கம் செய்யப்படுகின்றன, ஆனால், என் கருத்துப்படி, இது அவ்வளவு முக்கியமல்ல.
தயவுசெய்து கவனிக்கவும்: நீங்கள் அளவைப் பற்றி கவலைப்படுகிறீர்கள் என்றால், அல்பைன் சிறியதாக இருக்கும், மேலும் அது உங்களுக்கு பொருந்தும்.
டிஸ்ட்ரோலெஸ் படங்கள்
அடிப்படை "டிஸ்ட்ரோலெஸ்" படங்களின் தேர்வை வழங்குகிறது, அவற்றில் தொகுப்பு மேலாளர்கள், ஷெல்கள் மற்றும் கட்டளை வரியில் நீங்கள் பார்க்கும் பிற பயன்பாடுகள் இல்லை. இதன் விளைவாக, போன்ற தொகுப்பு மேலாளர்களைப் பயன்படுத்தவும் 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/பல கட்ட சட்டசபை
இதன் விளைவாக 130MB அளவுள்ள படம். மிகவும் மோசமாக இல்லை! ஒப்பிடுவதற்கு: இயல்புநிலை பைதான் படத்தின் எடை 929MB, மற்றும் "மெல்லிய" ஒன்று (3,7-slim) - 179MB, ஆல்பைன் படம் (3,7-alpine) 98,6MB ஆகும், அதே சமயம் எடுத்துக்காட்டில் பயன்படுத்தப்படும் அடிப்படை டிஸ்ட்ரோலெஸ் படம் 50,9MB ஆகும்.
முந்தைய எடுத்துக்காட்டில் நாம் ஒரு முழு கோப்பகத்தையும் நகலெடுக்கிறோம் என்பதை சுட்டிக்காட்டுவது நியாயமானது /usr/local/lib/python3.7/site-packages, இதில் நமக்குத் தேவையில்லாத சார்புகள் இருக்கலாம். தற்போதுள்ள அனைத்து பைதான் அடிப்படை படங்களின் அளவு வேறுபாடு மாறுபடும் என்பது தெளிவாக இருந்தாலும்.
எழுதும் நேரத்தில், Google distroless பல படங்களை ஆதரிக்கவில்லை: Java மற்றும் Python இன்னும் சோதனை நிலையில் உள்ளன, மேலும் Python 2,7 மற்றும் 3,5 க்கு மட்டுமே உள்ளது.
சின்னச்சின்ன படங்கள்
சிறிய படங்களை உருவாக்கும் எனது ஆவேசத்திற்குத் திரும்பு.
பொதுவாக, டிஸ்ட்ரோலெஸ் படங்கள் எவ்வாறு உருவாக்கப்படுகின்றன என்பதைப் பார்க்க விரும்பினேன். டிஸ்ட்ரோலெஸ் திட்டமானது கூகுளின் உருவாக்கக் கருவியைப் பயன்படுத்துகிறது bazel. இருப்பினும், Bazel ஐ நிறுவி உங்கள் சொந்த படங்களை எழுதுவதற்கு நிறைய வேலைகள் தேவைப்பட்டன (உண்மையாகச் சொல்வதானால், சக்கரத்தை மீண்டும் கண்டுபிடிப்பது வேடிக்கையாகவும் கல்வியாகவும் இருக்கிறது). நான் சிறிய படங்களை உருவாக்குவதை எளிதாக்க விரும்பினேன்: ஒரு படத்தை உருவாக்கும் செயல் மிகவும் எளிமையானதாக இருக்க வேண்டும், சாதாரணமான. உங்களுக்கான உள்ளமைவு கோப்புகள் எதுவும் இல்லை, கன்சோலில் ஒரே ஒரு வரி: просто собрать образ для <приложение>.
எனவே, நீங்கள் உங்கள் சொந்த படங்களை உருவாக்க விரும்பினால், தெரிந்து கொள்ளுங்கள்: அத்தகைய தனித்துவமான டோக்கர் படம் உள்ளது, scratch. ஸ்க்ராட்ச் என்பது ஒரு “வெற்று” படம், அதில் கோப்புகள் எதுவும் இல்லை, இருப்பினும் இது இயல்பாக எடையுள்ளதாக இருக்கிறது - ஆஹா! - 77 பைட்டுகள்.
FROM scratchகீறல் படம்
கீறல் படத்தின் யோசனை என்னவென்றால், நீங்கள் ஹோஸ்ட் மெஷினில் இருந்து எந்த சார்புநிலையையும் அதில் நகலெடுத்து அவற்றை ஒரு Dockerfile க்குள் பயன்படுத்தலாம் (இது அவற்றை நகலெடுப்பது போன்றது. apt மற்றும் புதிதாக நிறுவவும்), அல்லது பின்னர் டோக்கர் படம் செயல்படும் போது. இது டோக்கர் கொள்கலனின் உள்ளடக்கங்களை முழுமையாகக் கட்டுப்படுத்த உங்களை அனுமதிக்கிறது, இதனால் படத்தின் அளவை முழுமையாகக் கட்டுப்படுத்துகிறது.
இப்போது நாம் எப்படியாவது இந்த சார்புகளை சேகரிக்க வேண்டும். போன்ற தற்போதைய கருவிகள் apt தொகுப்புகளைப் பதிவிறக்கம் செய்ய உங்களை அனுமதிக்கிறது, ஆனால் அவை தற்போதைய கணினியுடன் பிணைக்கப்பட்டுள்ளன, மேலும் இறுதியில், அவை ஆதரிக்காது. Windows அல்லது MacOS.
எனவே, சாத்தியமான மிகச்சிறிய அளவில் ஒரு அடிப்படைப் படிமத்தை (base image) தானாகவே உருவாக்கி, அதைக் கொண்டு எந்தவொரு பயன்பாட்டையும் இயக்கக்கூடிய எனது சொந்தக் கருவியை உருவாக்க நான் முடிவு செய்தேன். நான் தொகுப்புகளைப் (packages) பயன்படுத்தினேன். Ubuntu/Debianஇது, களஞ்சியங்களிலிருந்து நேரடியாகத் தொகுப்புகளை மீட்டெடுத்து, அவற்றின் சார்புநிலைகளை மீள்சுழற்சி முறையில் கண்டறிந்தது. பாதுகாப்பு அபாயங்களைக் குறைக்கும் வகையில், அந்த நிரல் தொகுப்பின் சமீபத்திய நிலையான பதிப்பைத் தானாகவே பதிவிறக்கம் செய்ய வேண்டும்.
நான் கருவிக்கு பெயரிட்டேன் fetchy, ஏனென்றால் அவர்... கண்டுபிடித்து கொண்டு வருகிறார்... என்ன தேவை [ஆங்கிலத்தில் இருந்து "எடு", "கொண்டு வர" - தோராயமாக. பாதை]. கருவி ஒரு கட்டளை வரி இடைமுகம் மூலம் செயல்படுகிறது, ஆனால் அதே நேரத்தில் API ஐ வழங்குகிறது.
பயன்படுத்தி படத்தை அசெம்பிள் செய்ய fetchy (இந்த நேரத்தில் ஒரு பைதான் படத்தை எடுப்போம்), நீங்கள் CLI ஐப் பயன்படுத்த வேண்டும்: fetchy dockerize python. நீங்கள் இலக்கு இயக்க முறைமை மற்றும் குறியீட்டு பெயரைக் கேட்கலாம் fetchy தற்போது அடிப்படையிலான தொகுப்புகளை மட்டுமே பயன்படுத்துகிறது Debian и Ubuntu.
இப்போது நீங்கள் எந்த சார்புநிலைகள் தேவையில்லாததை (எங்கள் சூழலில்) தேர்வு செய்து அவற்றை விலக்கலாம். எடுத்துக்காட்டாக, பைதான் பெர்லைச் சார்ந்தது, இருப்பினும் பெர்ல் நிறுவப்படாமல் நன்றாக வேலை செய்கிறது.
Результаты
கட்டளையைப் பயன்படுத்தி உருவாக்கப்பட்ட பைதான் படம் fetchy dockerize python3.5 35MB மட்டுமே எடை கொண்டது (எதிர்காலத்தில் இதை இன்னும் இலகுவாக மாற்ற முடியும் என்று நான் உறுதியாக நம்புகிறேன்). டிஸ்ட்ரோலெஸ் படத்திலிருந்து மற்றொரு 15 WW ஐ ஷேவ் செய்ய முடிந்தது என்று மாறிவிடும்.
இதுவரை சேகரிக்கப்பட்ட அனைத்துப் படங்களையும் பார்க்கலாம் .
திட்டம் - .
நீங்கள் அம்சங்களைக் காணவில்லை என்றால், ஒரு கோரிக்கையை உருவாக்கவும் - உதவுவதில் நான் மகிழ்ச்சியடைவேன் :) இன்னும் அதிகமாக, நான் தற்போது மற்ற தொகுப்பு மேலாளர்களை ஒருங்கிணைக்கும் பணியில் ஈடுபட்டு வருகிறேன், அதனால் பல கட்ட உருவாக்கங்கள் தேவையில்லை.
ஆதாரம்: www.habr.com
