Доцкер: лош савет

Доцкер: лош савет

Када сам учио да возим ауто, већ на првом часу инструктор је улетео у раскрсницу у рикверц, а онда је рекао да то не треба да радиш – никако. Сетио сам се овог правила одмах и за цео живот.

Читате деци „Лош савет” Григорија Остера и видите како им лако и природно пада на памет да то не треба да раде.

Много је чланака написано о томе како правилно написати Доцкерфиле. Али нисам наишао на упутства о томе како да напишем погрешне Доцкерфилес. Попуњавам ову празнину. И можда ће у пројектима које добијам подршку бити мање таквих доцкер фајлова.

Сви ликови, ситуације и Доцкерфиле су измишљени. Ако се препознаш, извини.

Прављење Доцкерфиле-а, злокобно и страшно

Петер (Сениор јава/рубби/пхп девелопер): Колега Васили, да ли сте већ поставили нови модул у Доцкер?
Василиј (јуниор): Не, нисам имао времена, не могу да схватим са овим Доцкером. Има толико чланака о томе, да је вртоглаво.

Петар: Имали смо рок пре годину дана. Дозволите ми да вам помогнем, схватићемо то у процесу. Реци ми шта ти не иде.

Василиј: Не могу да изаберем основну слику тако да буде минимална, али има све што вам треба.
Петер: Узмите слику за убунту, има све што вам треба. А оно што је много непотребног, добро ће доћи касније. И не заборавите да ставите најновију ознаку како би верзија увек била најновија.

И први ред се појављује у Доцкерфиле-у:

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

Тада Игор Иванович, ДевОпс (али више Опс него Дев), упада у канцеларију вичући:

АИ: Петиа, твоји програмери су поново разбили базу података о храни, када ће се ово завршити...

После малог окршаја, Игор Иванович се охлади и почиње да сазна шта његове колеге раде овде.

АИ: Шта радиш?
Василиј: Питер ми помаже да направим Доцкерфиле за нови модул.
АИ: Да погледам... Шта си написао овде, чистиш спремиште посебном командом, ово је додатни слој... Али како да инсталираш зависности ако ниси копирао Гемфиле! И генерално, ово није добро.
Петер: Молим те, иди својим послом, ми ћемо то некако схватити.

Игор Иванович тужно уздише и одлази да открије ко је разбио базу података.

Петер: Да, али био је у праву у вези са кодом, морамо га гурнути у слику. И хајде да одмах инсталирамо ссх и супервизор, иначе ћемо покренути демоне.

Василиј: Онда ћу прво копирати Гемфиле и Гемфиле.лоцк, затим ћу све инсталирати, а затим ћу копирати цео пројекат. Ако се Гемфиле не промени, слој ће бити преузет из кеша.
Петер: Зашто сте сви са овим слојевима, копирајте све одједном. Копирај одмах. Прва линија.

Доцкерфиле сада изгледа овако:

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

Петар: Па, шта даље? Имате ли конфигурације за супервизора?
Василиј: Не, не. Али урадићу то брзо.
Петар: Онда ћеш то учинити. Хајде сада да нацртамо инит скрипту која ће све покренути. У реду, покрените ссх, са нохуп-ом, да бисмо могли да се повежемо са контејнером и видимо шта је пошло наопако. Затим покрените супервизор на исти начин. Па, онда само трчи путник.
П: Али прочитао сам да би требало да постоји један процес, тако да ће Доцкер знати да је нешто пошло наопако и може поново да покрене контејнер.
П: Не замарајте се глупостима. И уопште, како? Како све ово изводити у једном процесу? Нека Игор Иванович размишља о стабилности, није узалуд прима плату. Наш посао је да напишемо код. И уопште, нека каже хвала што смо написали Доцкефиле за њега.

10 минута и два видеа о мачкама касније.

П: Све сам урадио. Додао сам још коментара.
П: Покажи ми!

Најновија верзија Доцкерфиле-а:

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”]

П: Одлично, свиђа ми се. А коментари су на руском, згодни и читљиви, свако би тако радио. Све сам те научио, остало можеш сам. Хајдемо на кафу...

Па, сада имамо савршено ужасан Доцкерфиле, чији поглед ће натерати Игора Ивановича да пожели да одустане и очи ће га бољети још недељу дана. Доцкерфиле би, наравно, могао бити још гори, не постоји граница савршенства. Али за почетак, ово ће бити довољно.

Желео бих да завршим цитатом Григорија Остера:

Ако још нисте сигурни
Изабрали смо пут у животу,
И не знаш зашто
Започни свој радни пут,
Разбијте сијалице у ходницима -
Људи ће вам рећи "Хвала".
Помоћи ћеш народу
Штеди струју.

Извор: ввв.хабр.цом

Додај коментар