ඩොකර්: නරක උපදෙස්

ඩොකර්: නරක උපදෙස්

මම මෝටර් රථයක් පැදවීමට ඉගෙන ගන්නා විට, පළමු පාඩමේදීම උපදේශකයා ප්‍රතිලෝමව මංසන්ධියට පැදවූ අතර, පසුව ඔබ එය නොකළ යුතු බව කීවේය - කිසිසේත්ම නොකළ යුතු බවයි. මම මෙම රීතිය වහාම සහ මගේ ජීවිත කාලය පුරාම සිහිපත් කළෙමි.

ඔබ දරුවන්ට Grigory Oster විසින් "නරක උපදෙසක්" කියවන අතර, ඔවුන් මෙය නොකළ යුතු බව ඔවුන් මත කොතරම් පහසුවෙන් සහ ස්වභාවිකව උදාවේදැයි ඔබට පෙනේ.

Dockerfile නිවැරදිව ලියන ආකාරය ගැන ලිපි ගොඩක් ලියා ඇත. නමුත් වැරදි Dockerfiles ලියන ආකාරය පිළිබඳ උපදෙස් මට හමු නොවීය. මම මේ අඩුව පුරවනවා. ඒවගේම සමහර විට මට සහයෝගය ලැබෙන ව්‍යාපෘති වල එවැනි ඩොකර්ෆයිල් අඩුයි.

සියලුම චරිත, තත්වයන් සහ Dockerfile කල්පිතය. ඔබ ඔබව හඳුනා ගන්නේ නම්, සමාවෙන්න.

Dockerfile නිර්මාණය කිරීම, අශුභ සහ භයානක

පීටර් (ජ්‍යෙෂ්ඨ java/rubby/php සංවර්ධක): සගයකු වන Vasily, ඔබ දැනටමත් නව මොඩියුලයක් Docker වෙත උඩුගත කර තිබේද?
Vasily (කනිෂ්ඨ): නැහැ, මට වෙලාවක් තිබුණේ නැහැ, මට මේ Docker එකෙන් ඒක හොයාගන්න බැහැ. එය මත බොහෝ ලිපි තිබේ, එය කරකැවිල්ල.

පීටර්: අවුරුද්දකට කලින් අපිට කාල සීමාවක් තිබුණා. මට ඔබට උදව් කිරීමට ඉඩ දෙන්න, අපි එය ක්‍රියාවලියේදී සොයා ගනිමු. ඔබට වැඩ නොකරන දේ මට කියන්න.

Vasily: මට මූලික රූපයක් තෝරාගත නොහැකි නිසා එය අවම වේ, නමුත් ඔබට අවශ්ය සියල්ල තිබේ.
පීටර්: උබුන්ටු රූපය ගන්න, ඔබට අවශ්‍ය සියල්ල එහි ඇත. අනික අනවශ්‍ය දේවල් ගොඩක් පස්සෙ ප්‍රයෝජනවත් වෙයි. අනුවාදය සැමවිටම අලුත්ම වන පරිදි නවතම ටැගය දැමීමට අමතක නොකරන්න.

පළමු පේළිය Dockerfile හි දිස්වේ:

FROM ubuntu:latest

පීටර්: ඊළඟට කුමක් ද, අපගේ මොඩියුලය ලිවීමට අප භාවිතා කළේ කුමක්ද?
Vasily: ඉතින් රූබි, වෙබ් සේවාදායකයක් ඇති අතර සේවා ඩීමන් කිහිපයක් දියත් කළ යුතුය.
පීටර්: ඔව්, අපට අවශ්‍ය කුමක්ද: ruby, bundler, nodejs, imagemagick සහ වෙනත් දේ... ඒ සමඟම, අනිවාර්යයෙන්ම නව පැකේජ ලබා ගැනීමට උත්ශ්‍රේණි කිරීමක් කරන්න.
Vasily: අපි root යටතේ නොසිටින ලෙස අපි පරිශීලකයෙකු නිර්මාණය නොකරන්නෙමුද?
පීටර්: මගුලක් කරන්න, එහෙනම් ඔබට තවමත් අයිතිවාසිකම් සමඟ රැවටීමට සිදුවේ.
Vasily: මට කාලය අවශ්යයි, විනාඩි 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/*

එවිට ඊගෝර් ඉවානොවිච්, DevOps (නමුත් Dev වලට වඩා වැඩි Ops), කෑගසමින් කාර්යාලයට කඩා වැදී:

AI: Petya, ඔබේ සංවර්ධකයින් නැවතත් ආහාර දත්ත ගබඩාව බිඳ දැමුවා, මෙය අවසන් වන්නේ කවදාද...

කුඩා ගැටුමකින් පසු, ඊගෝර් ඉවානොවිච් සිසිල් වී ඔහුගේ සගයන් මෙහි කරන්නේ කුමක්දැයි සොයා බැලීමට පටන් ගනී.

AI: ඔබ මොකද කරන්නේ?
Vasily: Peter මට නව මොඩියුලයක් සඳහා Dockerfile නිර්මාණය කිරීමට උදව් කරයි.
AI: මට බලන්න ඉඩ දෙන්න... ඔබ මෙහි ලියා ඇත්තේ කුමක්ද, ඔබ වෙනම විධානයකින් ගබඩාව පිරිසිදු කරයි, මෙය අතිරේක තට්ටුවකි ... නමුත් ඔබ Gemfile පිටපත් කර නොමැති නම් පරායත්තතා ස්ථාපනය කරන්නේ කෙසේද! සහ පොදුවේ, මෙය හොඳ නැත.
පීටර්: කරුණාකර ඔබේ ව්‍යාපාරය කරගෙන යන්න, අපි එය කෙසේ හෝ තේරුම් ගනිමු.

Igor Ivanovich දුකෙන් සුසුම් හෙළමින් දත්ත සමුදාය කැඩුවේ කවුදැයි සොයා බැලීමට පිටත් වේ.

පීටර්: ඔව්, නමුත් ඔහු කේතය ගැන නිවැරදියි, අපි එය රූපයට තල්ලු කළ යුතුයි. අපි වහාම ssh සහ සුපරීක්ෂක ස්ථාපනය කරමු, එසේ නොමැතිනම් අපි ඩීමන් ආරම්භ කරමු.

Vasily: එවිට මම මුලින්ම Gemfile සහ Gemfile.lock පිටපත් කරමි, පසුව මම සියල්ල ස්ථාපනය කරමි, පසුව මම සම්පූර්ණ ව්යාපෘතිය පිටපත් කරමි. Gemfile වෙනස් නොවේ නම්, ලේයරය හැඹිලියෙන් ගනු ලැබේ.
පීටර්: ඇයි ඔයාලා හැමෝම මේ ලේයර් එක්ක ඉන්නේ, ඔක්කොම එකපාර කොපි කරන්න. වහාම පිටපත් කරන්න. පළමු පේළිය.

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/* 

පීටර්: ඉතින්, ඊළඟට කුමක් කළ යුතුද? ඔබට සුපරීක්ෂක සඳහා සැකසුම් තිබේද?
Vasily: නැහැ, නැහැ. නමුත් මම ඉක්මනින් කරන්නම්.
පීටර්: එවිට ඔබ එය කරනු ඇත. අපි දැන් සියල්ල දියත් කරන 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, ඇත්ත වශයෙන්ම, ඊටත් වඩා නරක විය හැකිය, පරිපූර්ණත්වයට සීමාවක් නොමැත. නමුත් ආරම්භයක් සඳහා, මෙය සිදු කරනු ඇත.

මම Grigory Oster ගේ උපුටා දැක්වීමකින් අවසන් කිරීමට කැමැත්තෙමි:

ඔබට තවමත් විශ්වාස නැත්නම්
අපි ජීවිතයේ මාර්ගය තෝරා ගත්තා,
ඒ ඇයි කියලා ඔයා දන්නේ නැහැ
ඔබේ ශ්රම ගමන ආරම්භ කරන්න,
ශාලාවේ ඇති විදුලි බුබුළු බිඳ දමන්න -
මිනිසුන් ඔබට "ස්තූතියි" යැයි කියනු ඇත.
ඔබ මිනිසුන්ට උදව් කරනු ඇත
විදුලිය ඉතිරි කරන්න.

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

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