డాకర్: చెడు సలహా

డాకర్: చెడు సలహా

నేను కారు నడపడం నేర్చుకుంటున్నప్పుడు, మొదటి పాఠం వద్ద శిక్షకుడు రివర్స్‌లో కూడలికి వెళ్లాడు, ఆపై మీరు అలా చేయకూడదని చెప్పారు - ఎప్పుడూ చేయవద్దు. నేను ఈ నియమాన్ని వెంటనే మరియు నా జీవితాంతం గుర్తుంచుకున్నాను.

మీరు పిల్లలకు గ్రిగరీ ఓస్టర్ ద్వారా “చెడు సలహా” చదివారు మరియు వారు దీన్ని చేయకూడదని వారికి ఎంత సులభంగా మరియు సహజంగా అర్థమౌతుందో మీరు చూస్తారు.

డాకర్‌ఫైల్‌ను సరిగ్గా ఎలా వ్రాయాలో చాలా కథనాలు వ్రాయబడ్డాయి. కానీ నేను తప్పు డాకర్‌ఫైల్‌లను ఎలా వ్రాయాలి అనే సూచనలను చూడలేదు. నేను ఈ ఖాళీని భర్తీ చేస్తున్నాను. మరియు బహుశా నేను మద్దతు పొందే ప్రాజెక్ట్‌లలో, అలాంటి డాకర్‌ఫైల్‌లు తక్కువగా ఉండవచ్చు.

అన్ని పాత్రలు, పరిస్థితులు మరియు డాకర్‌ఫైల్ కల్పితం. మిమ్మల్ని మీరు గుర్తించినట్లయితే, క్షమించండి.

డాకర్‌ఫైల్‌ను సృష్టించడం, అరిష్టం మరియు భయంకరమైనది

పీటర్ (సీనియర్ java/rubby/php డెవలపర్): సహోద్యోగి వాసిలీ, మీరు ఇప్పటికే డాకర్‌కి కొత్త మాడ్యూల్‌ని అప్‌లోడ్ చేసారా?
వాసిలీ (జూనియర్): లేదు, నాకు సమయం లేదు, ఈ డాకర్‌తో నేను దాన్ని గుర్తించలేను. దానిపై చాలా కథనాలు ఉన్నాయి, ఇది మైకము.

పీటర్: మాకు ఒక సంవత్సరం క్రితం గడువు ఉంది. నేను మీకు సహాయం చేయనివ్వండి, మేము దానిని ప్రక్రియలో కనుగొంటాము. మీకు ఏది పనికిరాదని చెప్పండి.

వాసిలీ: నేను ప్రాథమిక చిత్రాన్ని ఎంచుకోలేను, కనుక ఇది తక్కువగా ఉంటుంది, కానీ మీకు కావాల్సినవన్నీ ఉన్నాయి.
పీటర్: ఉబుంటు చిత్రాన్ని తీసుకోండి, మీకు కావాల్సినవన్నీ ఇందులో ఉన్నాయి. మరియు చాలా అనవసరమైన విషయాలు తరువాత ఉపయోగపడతాయి. మరియు తాజా ట్యాగ్‌ని ఉంచడం మర్చిపోవద్దు, తద్వారా సంస్కరణ ఎల్లప్పుడూ సరికొత్తగా ఉంటుంది.

మరియు మొదటి పంక్తి డాకర్‌ఫైల్‌లో కనిపిస్తుంది:

FROM ubuntu:latest

పీటర్: తర్వాత ఏమిటి, మా మాడ్యూల్ రాయడానికి మేము ఏమి ఉపయోగించాము?
వాసిలీ: కాబట్టి రూబీ, వెబ్ సర్వర్ ఉంది మరియు కొన్ని సేవా డెమోన్‌లను ప్రారంభించాలి.
పీటర్: అవును, మనకు ఏమి కావాలి: రూబీ, బండ్లర్, నోడెజ్‌లు, ఇమేజ్‌మాజిక్ మరియు ఇంకా ఏవి... మరియు అదే సమయంలో, ఖచ్చితంగా కొత్త ప్యాకేజీలను పొందడానికి అప్‌గ్రేడ్ చేయండి.
వాసిలీ: మరియు మేము రూట్‌లో ఉండకుండా ఉండటానికి వినియోగదారుని సృష్టించలేము?
పీటర్: ఫక్ ఇట్, అప్పుడు మీరు ఇంకా హక్కులతో మోసపోవలసి ఉంటుంది.
వాసిలీ: నాకు సమయం కావాలి, దాదాపు 15 నిమిషాలు, అన్నింటినీ కలిపి ఒకే ఆదేశంలో ఉంచడానికి, నేను దానిని చదివాను ...
(పీటర్ కఠోరమైన మరియు చాలా తెలివైన జూనియర్‌ని మొరటుగా అడ్డుకున్నాడు.)
పీటర్: ప్రత్యేక ఆదేశాలలో వ్రాయండి, చదవడం సులభం అవుతుంది.

డాకర్‌ఫైల్ పెరుగుతుంది:

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 (కానీ దేవ్ కంటే ఎక్కువ ఆప్స్), అరుస్తూ కార్యాలయంలోకి దూసుకుపోతాడు:

AI: పెట్యా, మీ డెవలపర్లు ఫుడ్ డేటాబేస్‌ను మళ్లీ బ్రేక్ చేసారు, ఇది ఎప్పుడు ముగుస్తుంది...

ఒక చిన్న వాగ్వివాదం తరువాత, ఇగోర్ ఇవనోవిచ్ చల్లబడ్డాడు మరియు అతని సహచరులు ఇక్కడ ఏమి చేస్తున్నారో తెలుసుకోవడం ప్రారంభిస్తాడు.

AI: మీరు ఏమి చేస్తున్నారు?
వాసిలీ: కొత్త మాడ్యూల్ కోసం డాకర్‌ఫైల్‌ను రూపొందించడంలో పీటర్ నాకు సహాయం చేస్తున్నాడు.
AI: నేను పరిశీలించి చూద్దాం... మీరు ఇక్కడ ఏమి వ్రాసారు, మీరు ప్రత్యేక కమాండ్‌తో రిపోజిటరీని క్లీన్ చేస్తారు, ఇది అదనపు లేయర్... అయితే మీరు జెమ్‌ఫైల్‌ను కాపీ చేయకుంటే డిపెండెన్సీలను ఎలా ఇన్‌స్టాల్ చేస్తారు! మరియు సాధారణంగా, ఇది మంచిది కాదు.
పీటర్: దయచేసి మీ వ్యాపారం గురించి చెప్పండి, మేము దానిని ఎలాగైనా కనుగొంటాము.

ఇగోర్ ఇవనోవిచ్ విచారంగా నిట్టూర్చాడు మరియు డేటాబేస్ను ఎవరు విచ్ఛిన్నం చేశారో గుర్తించడానికి బయలుదేరాడు.

పీటర్: అవును, కానీ అతను కోడ్ గురించి సరైనది, మనం దానిని చిత్రంలోకి నెట్టాలి. మరియు వెంటనే 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/* 

పీటర్: కాబట్టి, తరువాత ఏమిటి? మీరు సూపర్‌వైజర్ కోసం కాన్ఫిగర్‌లను కలిగి ఉన్నారా?
వాసిలీ: లేదు, లేదు. కానీ నేను త్వరగా చేస్తాను.
పీటర్: అప్పుడు నువ్వు చేస్తావు. ఇప్పుడు అన్నింటినీ ప్రారంభించే 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, వాస్తవానికి, మరింత అధ్వాన్నంగా ఉండవచ్చు, పరిపూర్ణతకు పరిమితి లేదు. కానీ ప్రారంభంలో, ఇది చేస్తుంది.

నేను గ్రిగరీ ఓస్టర్ నుండి ఒక కోట్‌తో ముగించాలనుకుంటున్నాను:

మీరు ఇంకా ఖచ్చితంగా తెలియకపోతే
మేము జీవితంలో మార్గాన్ని ఎంచుకున్నాము,
మరి ఎందుకో మీకు తెలియదు
మీ కార్మిక ప్రయాణాన్ని ప్రారంభించండి,
హాలులో లైట్ బల్బులను పగలగొట్టండి -
ప్రజలు మీకు "ధన్యవాదాలు" అని చెబుతారు.
మీరు ప్రజలకు సహాయం చేస్తారు
విద్యుత్ ఆదా చేయండి.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి