Docker : mali cunsiglii

Docker : mali cunsiglii

Quandu aghju amparatu à guidà una vittura, à a prima lezione, l'instructore hà guidatu in l'intersezzione in reverse, è poi hà dettu chì ùn deve micca fà chì - mai in tuttu. Aghju ricurdatu di sta regula immediatamente è per u restu di a mo vita.

Avete lettu "Bad Advice" da Grigory Oster à i zitelli, è vi vede quantu faciuli è naturalmente si stende nantu à elli chì ùn deve micca fà questu.

Parechji articuli sò stati scritti nantu à cumu scrive un Dockerfile currettamente. Ma ùn aghju micca scuntratu alcuna struzzioni nantu à cumu scrive Dockerfiles incorrecte. Aghju riempitu sta lacuna. E forsi in i prughjetti chì aghju ricevutu supportu, ci saranu menu dockerfiles.

Tutti i caratteri, situazioni è Dockerfile sò fittizi. Se vi ricunnosce, scusate.

Crià un Dockerfile, ominous è terribili

Petru (Senior java/rubby/php developer): Collega Vasily, avete digià caricatu un novu modulu à Docker?
Vasily (junior): Innò, ùn aghju micca u tempu, ùn possu micca capisce cù questu Docker. Ci sò tanti articuli nantu à questu, hè vertiginosa.

Petru: Avemu avutu una scadenza un annu fà. Lasciami aiutà ti, avemu da capisce in u prucessu. Dimmi ciò chì ùn viaghja micca per voi.

Vasily: Ùn possu micca sceglie una maghjina basica per quessa hè minima, ma hà tuttu ciò chì avete bisognu.
Petru: Pigliate l'imagine ubuntu, hà tuttu ciò chì avete bisognu. È ciò chì hè assai di cose innecessarii vi venerà più tardi. È ùn vi scurdate di mette l'ultimu tag in modu chì a versione hè sempre l'ultima.

È a prima linea appare in u Dockerfile:

FROM ubuntu:latest

Petru : Chì ci hè dopu, chì avemu usatu per scrive u nostru modulu ?
Vasily: Allora ruby, ci hè un servitore web è un paru di demoni di serviziu duveranu esse lanciati.
Petru: Iè, ciò chì avemu bisognu: ruby, bundler, nodejs, imagemagick è chì altru... È à u stessu tempu, fate un aghjurnamentu per ottene definitivamente novi pacchetti.
Vasily: È ùn creeremu micca un utilizatore per ùn esse micca sottu à a radica?
Petru : Cazzo, tandu vi tocca sempre à schernà cù i diritti.
Vasily: Aghju bisognu di tempu, circa 15 minuti, per mette tuttu in un cumandamentu, aghju lettu chì ...
(Petru interrompe rudemente u junior meticuloso è assai intelligente.)
Petru: Scrivite in cumandamenti separati, serà più faciule di leghje.

Dockerfile cresce:

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

Allora Igor Ivanovich, DevOps (ma più Ops chè Dev), irrompe in l'uffiziu gridendu:

AI: Petya, i vostri sviluppatori anu rottu di novu a basa di dati di l'alimentariu, quandu finirà questu...

Dopu à una piccula scaramuccia, Igor Ivanovich rinfriscà è principia à sapè ciò chì i so culleghi facenu quì.

AI: Chì faci?
Vasily: Petru m'aiuta à creà un Dockerfile per un novu modulu.
AI: Lasciami piglià un ochju... Chì avete scrittu quì, pulite u repository cù un cumandamentu separatu, questu hè un stratu supplementu... Ma cumu si stallanu dipendenze si ùn avete micca copiatu u Gemfile! È in generale, questu ùn hè micca bonu.
Petru: Per piacè andate nantu à i vostri affari, l'avemu da capisce in qualchì manera.

Igor Ivanovich sospira tristemente è parte per sapè quale hà ruttu a basa di dati.

Petru: Iè, ma ellu avia ragiò nantu à u codice, avemu bisognu di spinghje in l'imaghjini. È stallà subitu ssh è supervisore, altrimenti avemu da principià i demoni.

Vasily: Allora prima cupià u Gemfile è Gemfile.lock, dopu stallà tuttu, è dopu copià tuttu u prughjettu. Se u Gemfile ùn cambia micca, a capa sarà presa da a cache.
Petru: Perchè site tutti cù questi strati, copiate tuttu in una volta. Copia subitu. A prima linea.

U Dockerfile avà pare cusì:

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

Petru : Allora, chì dopu ? Avete cunfigurazione per u supervisore?
Vasily: Innò, nò. Ma l'aghju da fà prestu.
Petru : Allora a farai. Scupritemu avà un script init chì lanciarà tuttu. Va bè, cusì cuminciate ssh, cù nohup, per pudè cunnette à u containeru è vede ciò chì hè andatu. Allora eseguite u supervisore in u listessu modu. Ebbè, allura vi ghjustu curriri passageru.
Q: Ma aghju lettu chì ci deve esse un prucessu, cusì Docker saperà chì qualcosa hè andatu male è pò riavvia u cuntinuu.
P: Ùn vi inchiodate micca a testa cun sciocchezza. È in generale, cumu? Cumu eseguite tuttu questu in un prucessu? Chì Igor Ivanovich pensa à a stabilità, ùn hè micca per nunda chì riceve un salariu. U nostru travagliu hè di scrive codice. È in generale, ch'ellu dice grazie chì avemu scrittu u Dockefile per ellu.

10 minuti è dui video nantu à i misgi dopu.

Q: Aghju fattu tuttu. Aghju aghjustatu più cumenti.
P: Mostrami!

Ultima versione di 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”]

P: Grande, mi piace. È i cumenti sò in russo, cunvene è leghjite, tutti travaglianu cusì. T'aghju amparatu tuttu, pudete fà u restu sè stessu. Andemu à piglià un caffè...

Ebbè, avà avemu un Dockerfile perfettamenti terribili, a vista di u quali farà chì Igor Ivanovich vulete abbandunà è i so ochji feranu per un'altra settimana. U Dockerfile, sicuru, puderia esse ancu peggiu, ùn ci hè micca limite à a perfezione. Ma per un principiu, questu farà.

Vogliu finisce cù una citazione di Grigory Oster:

Sì ùn site micca sicuru
Avemu sceltu a strada in a vita,
È ùn sapete perchè
Cumincià u vostru viaghju di travagliu,
Rompe e lampadine in i corridoi -
A ghjente vi dicerà "Grazie".
Aiuterete a ghjente
Salvà l'electricità.

Source: www.habr.com

Add a comment