தங்களை நம்பிய சிறிய டோக்கர் படங்கள்*

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

தங்களை நம்பிய சிறிய டோக்கர் படங்கள்*

உங்கள் தேவைகளுக்காக சிறிய டோக்கர் படங்களை தானாக உருவாக்குவது எப்படி

அசாதாரண தொல்லை

கடந்த இரண்டு மாதங்களாக, டோக்கர் படம் எவ்வளவு சிறியதாக இருக்க வேண்டும் என்பதில் நான் ஆர்வமாக இருந்தேன், இன்னும் பயன்பாடு இயங்குகிறதா?

எனக்கு புரிகிறது, யோசனை விசித்திரமானது.

நான் விவரங்கள் மற்றும் தொழில்நுட்பங்களுக்குள் செல்வதற்கு முன், இந்த பிரச்சனை ஏன் என்னை மிகவும் தொந்தரவு செய்தது, அது உங்களை எவ்வாறு பாதிக்கிறது என்பதை விளக்க விரும்புகிறேன்.

ஏன் அளவு முக்கியமானது

டோக்கர் படத்தின் உள்ளடக்கங்களைக் குறைப்பதன் மூலம், பாதிப்புகளின் பட்டியலைக் குறைக்கிறோம். கூடுதலாக, நாங்கள் படங்களை சுத்தமாக்குகிறோம், ஏனெனில் அவை பயன்பாடுகளை இயக்குவதற்குத் தேவையானவை மட்டுமே கொண்டிருக்கின்றன.

இன்னும் ஒரு சிறிய நன்மை உள்ளது - படங்கள் கொஞ்சம் வேகமாக பதிவிறக்கம் செய்யப்படுகின்றன, ஆனால், என் கருத்துப்படி, இது அவ்வளவு முக்கியமல்ல.

தயவுசெய்து கவனிக்கவும்: நீங்கள் அளவைப் பற்றி கவலைப்படுகிறீர்கள் என்றால், அல்பைன் சிறியதாக இருக்கும், மேலும் அது உங்களுக்கு பொருந்தும்.

டிஸ்ட்ரோலெஸ் படங்கள்

திட்டம் டிஸ்ட்ரோலெஸ் அடிப்படை "டிஸ்ட்ரோலெஸ்" படங்களின் தேர்வை வழங்குகிறது, அவற்றில் தொகுப்பு மேலாளர்கள், ஷெல்கள் மற்றும் கட்டளை வரியில் நீங்கள் பார்க்கும் பிற பயன்பாடுகள் இல்லை. இதன் விளைவாக, போன்ற தொகுப்பு மேலாளர்களைப் பயன்படுத்தவும் 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 ஐ ஆதரிக்காது.

எனவே, எனது சொந்தக் கருவியை உருவாக்கத் தொடங்கினேன், அது தானாகவே சிறிய அளவிலான அடிப்படை படத்தை உருவாக்குகிறது மற்றும் எந்த பயன்பாட்டையும் இயக்கும். நான் உபுண்டு/டெபியன் தொகுப்புகளைப் பயன்படுத்தினேன், தேர்வு செய்தேன் (பொதிகளை நேரடியாக களஞ்சியங்களிலிருந்து பெறுதல்) மற்றும் அவற்றின் சார்புகளை மீண்டும் மீண்டும் கண்டறிந்தேன். நிரல் தானாகவே தொகுப்பின் சமீபத்திய நிலையான பதிப்பைப் பதிவிறக்க வேண்டும், முடிந்தவரை பாதுகாப்பு அபாயங்களைக் குறைக்கிறது.

நான் கருவிக்கு பெயரிட்டேன் fetchy, ஏனென்றால் அவர்... கண்டுபிடித்து கொண்டு வருகிறார்... என்ன தேவை [ஆங்கிலத்தில் இருந்து "எடு", "கொண்டு வர" - தோராயமாக. பாதை]. கருவி ஒரு கட்டளை வரி இடைமுகம் மூலம் செயல்படுகிறது, ஆனால் அதே நேரத்தில் API ஐ வழங்குகிறது.

பயன்படுத்தி படத்தை அசெம்பிள் செய்ய fetchy (இந்த நேரத்தில் ஒரு பைதான் படத்தை எடுப்போம்), நீங்கள் CLI ஐப் பயன்படுத்த வேண்டும்: fetchy dockerize python. நீங்கள் இலக்கு இயக்க முறைமை மற்றும் குறியீட்டு பெயரைக் கேட்கலாம் fetchy தற்போது டெபியன் மற்றும் உபுண்டு அடிப்படையிலான தொகுப்புகளை மட்டுமே பயன்படுத்துகிறது.

இப்போது நீங்கள் எந்த சார்புநிலைகள் தேவையில்லாததை (எங்கள் சூழலில்) தேர்வு செய்து அவற்றை விலக்கலாம். எடுத்துக்காட்டாக, பைதான் பெர்லைச் சார்ந்தது, இருப்பினும் பெர்ல் நிறுவப்படாமல் நன்றாக வேலை செய்கிறது.

Результаты

கட்டளையைப் பயன்படுத்தி உருவாக்கப்பட்ட பைதான் படம் fetchy dockerize python3.5 35MB மட்டுமே எடை கொண்டது (எதிர்காலத்தில் இதை இன்னும் இலகுவாக மாற்ற முடியும் என்று நான் உறுதியாக நம்புகிறேன்). டிஸ்ட்ரோலெஸ் படத்திலிருந்து மற்றொரு 15 WW ஐ ஷேவ் செய்ய முடிந்தது என்று மாறிவிடும்.

இதுவரை சேகரிக்கப்பட்ட அனைத்துப் படங்களையும் பார்க்கலாம் இங்கே.

திட்டம் - இங்கே.

நீங்கள் அம்சங்களைக் காணவில்லை என்றால், ஒரு கோரிக்கையை உருவாக்கவும் - உதவுவதில் நான் மகிழ்ச்சியடைவேன் :) இன்னும் அதிகமாக, நான் தற்போது மற்ற தொகுப்பு மேலாளர்களை ஒருங்கிணைக்கும் பணியில் ஈடுபட்டு வருகிறேன், அதனால் பல கட்ட உருவாக்கங்கள் தேவையில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்