Docker: вредные советы

Docker: вредные советы

Ko sem se učil voziti avto, je inštruktor na prvem srečanju zapeljal nazaj na križišče, nato pa rekel, da tako ne smemo delati — nikoli. To pravilo sem si zapomnil takoj in za vse življenje.

Beri otrokom "Škodljivi nasveti" Grigorija Ostera in vidiš, kako enostavno in brezskrbno dojamejo, da tako ne smeš delati.

O tem, kako pravilno pisati Dockerfile, je napisan kup člankov. A nikjer nisem našel navodil, kako pisati napačne Dockerfile. Ta manko zdaj zapolnjujem. Morda bo v projektih, ki jih dobim za podporo, takih Dockerfile-ov manj.

Vsi liki, situacije in Dockerfile so izmišljeni. Če se prepoznate, oprosti.

Ustvarjamo Dockerfile, zlohoten in grozljiv

Petar (Senior java/ruby/php razvijalec): Kolega Vasily, ali si že naložil nov modul v Docker?
Vasily (junior): Ne, nisem utegnil, s Dockerjem se še vedno ne morem spoprijeti. Toliko člankov, da mi grejo oči v nič.

Petar: Naš rok je potekel že pred letom dni. Poglej, pomagal ti bom, med postopkom se bova razjasnila. Povej, kaj ti ne gre.

Vasily: Ne morem izbrati osnovne slike, da bi bila minimalna, a vseeno imela vse, kar potrebujem.
Petar: Vzemi sliko ubuntu, v njej je vse, kar potrebuješ. Tudi če je kaj odveč, se bo kasneje še obneslo. In ne pozabi dodati oznake latest, da bo različica vedno najnovejša.

In v Dockerfile se pojavi prva vrstica:

FROM ubuntu:latest

Petar: Kaj pa naprej, na čem smo pisali naš modul?
Vasily: Tako ruby, tam mora zagnati spletni strežnik in nekaj pomožnih demonov.
Petar: Aha, kar potrebujemo: ruby, bundler, nodejs, imagemagick in še kaj … In pri tem naredi nadgradnjo, da zagotoviš nove pakete.
Vasily: Pa ne bomo ustvarili uporabnika, da ne bi delali kot root?
Petar: Ne, kasneje se bom še ukvarjal s pravicami.
Vasily: Potrebujem čas, približno 15 minut, da vse to združim v en ukaz, bral sem, da ...
(Petar grobo prekine natančnega in preveč pametnega novinca.)
Petar: Piši z ločenimi ukazi, tako bo tudi lažje brati.

Dockerfile raste:

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

V tem trenutku v pisarno vstopi Igor Ivanovič, DevOps (a več Ops kot Dev), in kriči:

II: Petar, tvoji razvijalci so spet uničili produkcijsko BDP, kdaj se bo to končalo….

Po kratki prepirki Iгорь Иванович se ohladi in začne ugotavljati, s čim se ukvarjajo kolegi.

AI: S čim so zaposleni?
Vasilij: Peter mi pomaga pripraviti Dockerfile za nov modul.
AI: Pustite, da pogledam... Kaj ste tu napisali? Sami čistite repozitorij z ločeno ekipo, to je dodaten sloj... Kako pa nameščate odvisnosti, če niste skopirali Gemfile! In sploh, to nikamor ne pelje.
Peter: Pojdite, prosim, po svojih opravilih, mi se bomo že nekako uredili.

Igor Ivanovič obupano vzdihne in gre razjasniti, kdo je pokvaril Bazo podatkov.

Peter: Ja, ampak glede kode ima prav, treba jo je vključiti v sliko. In dajva takoj namestiti ssh in supervisor, kako bomo namreč zagnali demone.

Vasilij: Najprej bom skopiral Gemfile in Gemfile.lock, nato vse namestil, potem pa še kopiral celoten projekt. Če se Gemfile ne spremeni, se bo sloj vzel iz predpomnilnika.
Peter: Kaj imate s temi sloji, skopiraj takoj vse. Takoj skopiraj. Prvo vrstico.

Dockerfile zdaj izgleda takole:

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

Peter: No, kaj zdaj. Imaš konfiguracije za supervisor?
Vasilij: Ne, nimam. Ampak bom hitro naredil.
Peter: Potem naredi. Dajva zdaj sestaviti init skript, ki bo vse zagnal. Torej, najprej zaženeš ssh, z nohup, da se lahko povežemo s kontejnerjem in vidimo, kaj je šlo narobe. Potem enako zaženi supervisor. In kasneje boš samo zažagal passenger.
V: A vendar sem bral, da naj bi bil en sam proces, tako da bo Docker vedel, da je nekaj šlo narobe in bo lahko znova zagnal kontejner.
P: Ne obremenjuj se z neumnostmi. In sploh, kako? Kako boš to vse zagnal v enem procesu? Naj se o stabilnosti ukvarja Igor Ivanovič, saj ne zastonj prejema plačo. Naša naloga je pisati kodo. In naj se mu zahvalijo, da smo zanj napisali Dockerfile.

Po 10 minutah in dveh videih o mačkicah.

V: Vse sem naredil. Dodal sem še nekaj komentarjev.
P: Pokaži!

Sveža različica Dockerfile:

FROM ubuntu:latest

# Kopiramo izvorni kod
COPY .\/ \/app
WORKDIR \/app

# Ažuriramo spisak paketa
RUN apt-get update 

# Ažuriramo pakete
RUN apt-get upgrade

# Instaliramo potrebne pakete
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# Instaliramo bundler
RUN gem install bundler

# Instaliramo nodejs koji se koristi za izradu statike
RUN curl -sL https:\/\/deb.nodesource.com\/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# Instaliramo zavisnosti
RUN bundle install --without development test --path vendor\/bundle

# Čistimo za sobom keš
RUN rm -rf \/usr\/local\/bundle\/cache\/*.gem 
RUN apt-get clean 
RUN rm -rf \/var\/lib\/apt\/lists\/* \/tmp\/* \/var\/tmp\/* 

# Pokrećemo skript pri pokretanju kontejnera koji će pokrenuti sve ostalo.
CMD ["\/app\/init.sh"]

P: Sjajno, sviđa mi se. I komentari na ruskom, praktično i čitljivo, svi bi tako radili. Sve sam te naučio, dalje možeš sam. Idemo na kafu…

Evo, dobili smo savršeno strašan Dockerfile, od kojeg će Igor Ivanovič želeti da da otkaz i oči će ga boljeti još nedelju dana. Dockerfile, naravno, mogao je biti još gori, nema granica savršenstvu. Ali za početak, može i ovako.

Želeo bih da završim citatom Grigorija Ostera:

Ako još niste čvrsto
Izabrali put u životu,
I ne znate odakle da
Započnete svoj radni put,
Udrite u sijalice u ulazima —
Ljudi će vam reći "Hvala".
Pomoći ćete narodu
Da štedi električnu energiju.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster