டோக்கர்: தவறான ஆலோசனை

டோக்கர்: தவறான ஆலோசனை

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

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

Dockerfile ஐ எப்படி சரியாக எழுதுவது என்பது குறித்து நிறைய கட்டுரைகள் எழுதப்பட்டுள்ளன. ஆனால் தவறான டாக்கர்ஃபைல்களை எப்படி எழுதுவது என்பதற்கான வழிமுறைகளை நான் காணவில்லை. நான் இந்த இடைவெளியை நிரப்புகிறேன். நான் ஆதரவைப் பெறும் திட்டங்களில், இதுபோன்ற டாக்கர்ஃபைல்கள் குறைவாக இருக்கும்.

அனைத்து கதாபாத்திரங்கள், சூழ்நிலைகள் மற்றும் Dockerfile ஆகியவை கற்பனையானவை. நீங்கள் உங்களை அடையாளம் கண்டுகொண்டால், மன்னிக்கவும்.

ஒரு Dockerfile உருவாக்குதல், அச்சுறுத்தும் மற்றும் பயங்கரமானது

பீட்டர் (மூத்த ஜாவா/ரப்பி/பிஎச்பி டெவலப்பர்): சக ஊழியர் வாசிலி, நீங்கள் ஏற்கனவே டோக்கரில் ஒரு புதிய தொகுதியைப் பதிவேற்றியுள்ளீர்களா?
வாசிலி (ஜூனியர்): இல்லை, எனக்கு நேரம் இல்லை, இந்த டோக்கர் மூலம் என்னால் கண்டுபிடிக்க முடியவில்லை. அதில் பல கட்டுரைகள் உள்ளன, அது மயக்கமாக இருக்கிறது.

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

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

முதல் வரி Dockerfile இல் தோன்றும்:

FROM ubuntu:latest

பீட்டர்: அடுத்தது என்ன, எங்கள் தொகுதியை எழுத நாங்கள் எதைப் பயன்படுத்தினோம்?
வாசிலி: எனவே ரூபி, ஒரு வலை சேவையகம் உள்ளது மற்றும் இரண்டு சேவை டீமான்கள் தொடங்கப்பட வேண்டும்.
பீட்டர்: ஆமாம், நமக்கு என்ன தேவை: ரூபி, பண்ட்லர், நோட்ஜ்கள், இமேஜ்மேஜிக் மற்றும் வேறு என்ன... அதே நேரத்தில், நிச்சயமாக புதிய தொகுப்புகளைப் பெற மேம்படுத்தவும்.
வாசிலி: மேலும் ஒரு பயனரை உருவாக்க மாட்டோம், அதனால் நாங்கள் ரூட்டின் கீழ் இருக்க மாட்டோம்?
பீட்டர்: அதை விடுங்கள், நீங்கள் இன்னும் உரிமைகளுடன் முட்டாளாக்க வேண்டும்.
வாசிலி: எனக்கு நேரம் தேவை, சுமார் 15 நிமிடங்கள், எல்லாவற்றையும் ஒன்றாகக் கட்டளையிட, நான் அதைப் படித்தேன் ...
(கணிசமான மற்றும் மிகவும் புத்திசாலியான ஜூனியரை பீட்டர் முரட்டுத்தனமாக குறுக்கிடுகிறார்.)
பீட்டர்: தனித்தனி கட்டளைகளில் எழுதுங்கள், படிக்க எளிதாக இருக்கும்.

Dockerfile வளரும்:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

பின்னர் இகோர் இவனோவிச், டெவொப்ஸ் (ஆனால் தேவ்வை விட அதிக ஓப்ஸ்), அலறியடித்துக்கொண்டு அலுவலகத்திற்குள் நுழைந்தார்:

AI: பெட்யா, உங்கள் டெவலப்பர்கள் மீண்டும் உணவு தரவுத்தளத்தை உடைத்துவிட்டனர், இது எப்போது முடிவடையும்...

ஒரு சிறிய சண்டைக்குப் பிறகு, இகோர் இவனோவிச் குளிர்ந்து, தனது சக ஊழியர்கள் இங்கே என்ன செய்கிறார்கள் என்பதைக் கண்டுபிடிக்கத் தொடங்குகிறார்.

AI: நீங்கள் என்ன செய்கிறீர்கள்?
Vasily: ஒரு புதிய தொகுதிக்கான Dockerfile ஐ உருவாக்க பீட்டர் எனக்கு உதவுகிறார்.
AI: என்னைப் பார்க்கிறேன்... நீங்கள் இங்கே என்ன எழுதினீர்கள், தனி கட்டளையுடன் களஞ்சியத்தை சுத்தம் செய்கிறீர்கள், இது கூடுதல் அடுக்கு... ஆனால் நீங்கள் ஜெம்ஃபைலை நகலெடுக்கவில்லை என்றால் சார்புகளை எவ்வாறு நிறுவுவது! பொதுவாக, இது நல்லதல்ல.
பீட்டர்: தயவு செய்து உங்கள் தொழிலைப் பற்றிப் பேசுங்கள், நாங்கள் அதை எப்படியாவது கண்டுபிடித்துவிடுவோம்.

இகோர் இவனோவிச் சோகமாக பெருமூச்சு விட்டு, தரவுத்தளத்தை உடைத்தவர் யார் என்பதைக் கண்டுபிடிக்க வெளியேறினார்.

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

Vasily: நான் முதலில் Gemfile மற்றும் Gemfile.lock ஐ நகலெடுப்பேன், பின்னர் எல்லாவற்றையும் நிறுவுவேன், பின்னர் முழு திட்டத்தையும் நகலெடுப்பேன். ஜெம்ஃபைல் மாறவில்லை என்றால், கேச்யிலிருந்து லேயர் எடுக்கப்படும்.
பீட்டர்: நீங்கள் ஏன் இந்த அடுக்குகளுடன் இருக்கிறீர்கள், எல்லாவற்றையும் ஒரே நேரத்தில் நகலெடுக்கவும். உடனே நகலெடுக்கவும். முதல் வரியே.

Dockerfile இப்போது இது போல் தெரிகிறது:

FROM ubuntu:latest
COPY ./ /app
WORKDIR /app
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

பீட்டர்: சரி, அடுத்து என்ன? மேற்பார்வையாளருக்கான கட்டமைப்புகள் உங்களிடம் உள்ளதா?
வாசிலி: இல்லை, இல்லை. ஆனால் சீக்கிரம் செய்வேன்.
பீட்டர்: நீங்கள் அதை செய்வீர்கள். எல்லாவற்றையும் தொடங்கும் init ஸ்கிரிப்டை இப்போது வரைவோம். சரி, நீங்கள் nohup உடன் ssh ஐத் தொடங்குங்கள், இதன் மூலம் நாம் கண்டெய்னருடன் இணைக்கலாம் மற்றும் என்ன தவறு நடந்தது என்பதைப் பார்க்கலாம். பின்னர் அதே வழியில் மேற்பார்வையாளரை இயக்கவும். சரி, நீங்கள் பயணிகளை இயக்குங்கள்.
கே: ஆனால் ஒரு செயல்முறை இருக்க வேண்டும் என்று நான் படித்தேன், எனவே ஏதோ தவறு நடந்துள்ளது என்பதை டோக்கருக்குத் தெரியும் மற்றும் கொள்கலனை மறுதொடக்கம் செய்யலாம்.
பி: முட்டாள்தனமாக உங்கள் தலையை தொந்தரவு செய்யாதீர்கள். மற்றும் பொதுவாக, எப்படி? இதையெல்லாம் ஒரே செயல்பாட்டில் எப்படி இயக்குவது? இகோர் இவனோவிச் ஸ்திரத்தன்மையைப் பற்றி சிந்திக்கட்டும், அவர் சம்பளம் பெறுவது ஒன்றும் இல்லை. குறியீடு எழுதுவது எங்கள் வேலை. பொதுவாக, நாங்கள் அவருக்காக டாக்ஃபைலை எழுதியதற்கு அவர் நன்றி சொல்லட்டும்.

10 நிமிடங்கள் மற்றும் பூனைகள் பற்றிய இரண்டு வீடியோக்கள் பின்னர்.

கே: நான் எல்லாவற்றையும் செய்தேன். மேலும் கருத்துகளைச் சேர்த்துள்ளேன்.
ப: எனக்குக் காட்டு!

Dockerfile இன் சமீபத்திய பதிப்பு:

FROM ubuntu:latest

# Копируем исходный код
COPY ./ /app
WORKDIR /app

# Обновляем список пакетов
RUN apt-get update 

# Обновляем пакеты
RUN apt-get upgrade

# Устанавливаем нужные пакеты
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# Устанавливаем bundler
RUN gem install bundler

# Устанавливаем nodejs используется для сборки статики
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# Устанавливаем зависимости
RUN bundle install --without development test --path vendor/bundle

# Чистим за собой кэши
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Запускаем скрипт, при старте контейнера, который запустит все остальное.
CMD [“/app/init.sh”]

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

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

கிரிகோரி ஆஸ்டரின் மேற்கோளுடன் முடிக்க விரும்புகிறேன்:

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

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

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