Docker: aholku txarra

Docker: aholku txarra

Kotxea gidatzen ikasten ari nintzela, lehenengo ikasgaian irakasleak alderantziz bidegurutzera joan zen, eta gero esan zuen ez zenuela hori egin behar, inoiz ez. Arau hau berehala gogoratu nuen eta bizitza osorako.

Grigory Oster-en “Aholku txarrak” irakurtzen diezu haurrei, eta ikusten duzu zein erraz eta naturaltasunez argitzen zaien hori ez dutela egin behar.

Artikulu asko idatzi dira Dockerfile bat behar bezala idazteko. Baina ez nuen Dockerfile okerrak idazteko argibiderik topatu. Hutsune hau betetzen ari naiz. Eta agian laguntza jasotzen dudan proiektuetan horrelako dockerfile gutxiago egongo dira.

Pertsonaia, egoera eta Dockerfile guztiak fikziozkoak dira. Zure burua ezagutzen baduzu, barkatu.

Dockerfile bat sortzea, minagarria eta izugarria

Peter (Java/rubby/php garatzaile nagusia): Vasily lankidea, dagoeneko igo al duzu modulu berri bat Docker-era?
Vasily (junior): Ez, ez nuen denborarik izan, ezin dut asmatu Docker honekin. Hainbeste artikulu daude horri buruz, zorabioa da.

Peter: Duela urtebete geneukan epe bat. Utzidazu laguntzen, prozesuan asmatuko dugu. Esadazu zerk ez dizu balio.

Vasily: Ezin dut oinarrizko irudi bat aukeratu, gutxienekoa izan dadin, baina behar duzun guztia dauka.
Peter: Hartu ubuntu irudia, behar duzun guztia dauka. Eta beharrezkoak ez diren gauza asko gero ondo etorriko dira. Eta ez ahaztu azken etiketa jartzea, bertsioa beti azkena izan dadin.

Eta lehenengo lerroa Dockerfile-n agertzen da:

FROM ubuntu:latest

Peter: Zer da hurrengoa, zer erabili dugu gure modulua idazteko?
Vasily: Beraz, ruby, web zerbitzari bat dago eta zerbitzu-daemon pare bat abiarazi beharko lirateke.
Peter: Bai, zer behar dugu: ruby, bundler, nodejs, imagemagick eta zer gehiago... Eta aldi berean, berritze bat egin pakete berriak behin betiko lortzeko.
Vasily: Eta ez dugu erabiltzailerik sortuko erropean egon ez gaitezen?
Peter: Joder, orduan oraindik eskubideekin tonto egin behar duzu.
Vasily: Denbora behar dut, 15 minutu inguru, dena komando batean biltzeko, irakurri dut...
(Peterek zakarki eteten du gazte zorrotza eta oso argia.)
Peter: Idatzi agindu bereizietan, errazagoa izango da irakurtzen.

Dockerfile hazten da:

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

Orduan Igor Ivanovich, DevOps (baina Dev baino Ops gehiago), bulegora lehertu da oihuka:

AI: Petya, zure garatzaileek elikagaien datu-basea apurtu dute berriro, noiz amaituko da hau...

Liskar txiki baten ostean, Igor Ivanovich hoztu eta bere lankideek hemen zer egiten duten jakiten hasten da.

AI: Zertan ari zara?
Vasily: Peter modulu berri baterako Dockerfile bat sortzen laguntzen ari zait.
AI: Utzidazu begirada bat bota... Zer idatzi duzu hemen, biltegia garbitzen duzu aparteko komando batekin, hau geruza gehigarria da... Baina nola instalatu menpekotasunak Gemfile kopiatu ez baduzu! Eta, oro har, hau ez da ona.
Peter: Mesedez, joan zure negozioa, nolabait asmatuko dugu.

Igor Ivanovitxek hasperen egiten du triste eta datu-basea nork hautsi duen asmatzera alde egiten du.

Peter: Bai, baina arrazoia zuen kodeari buruz, irudira bultzatu behar dugu. Eta berehala instala ditzagun ssh eta gainbegiratzailea, bestela deabruak abiaraziko ditugu.

Vasily: Orduan lehenik Gemfile eta Gemfile.lock kopiatuko ditut, gero dena instalatuko dut eta gero proiektu osoa kopiatuko dut. Gemfile-a aldatzen ez bada, geruza cachetik aterako da.
Peter: Zergatik zaudete guztiak geruza hauekin, kopiatu dena aldi berean. Kopiatu berehala. Oso lehen lerroa.

Dockerfile-k orain itxura hau du:

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: Orduan, zer? Begiralerako konfiguraziorik ba al duzu?
Vasily: Ez, ez. Baina azkar egingo dut.
Peter: Orduan egingo duzu. Egin dezagun orain dena abiaraziko duen hasierako script bat. Ados, ssh hasten duzu, nohup-ekin, edukiontzira konekta gaitezen eta zer gertatu den ikusi ahal izateko. Ondoren, exekutatu gainbegiralea modu berean. Beno, orduan bidaiari exekutatu besterik ez duzu.
G: Baina irakurri dut prozesu bat egon behar dela, beraz, Docker-ek jakingo du zerbait gaizki joan dela eta edukiontzia berrabiarazi dezakeela.
P: Ez ezazu burua txorakeriaz molestatu. Eta orokorrean, nola? Nola exekutatu hau guztia prozesu bakarrean? Igor Ivanovichek egonkortasunari buruz pentsa dezala, ez da alferrik soldata jasotzen duela. Gure lana kodea idaztea da. Eta, oro har, esan dezala eskerrak eman zion Dockefile idatzi genuelako.

10 minutu eta katuei buruzko bi bideo geroago.

G: Dena egin dut. Iruzkin gehiago gehitu ditut.
P: Erakutsi!

Dockerfile-ren azken bertsioa:

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: Bikaina, gustatzen zait. Eta iruzkinak errusieraz daude, erosoak eta irakurgarriak, denek horrela funtzionatuko lukete. Guztia irakatsi dizut, zuk zeuk egin dezakezu gainerakoa. Goazen kafe pixka bat hartzera...

Bada, orain Dockerfile guztiz ikaragarria dugu, ikusita Igor Ivanovitxek irteteko gogoa eragingo dio eta beste aste batez begiak minduko zaizkio. Dockerfile, noski, are okerragoa izan daiteke, ez dago perfekzioaren mugarik. Baina hasteko, honek balioko du.

Grigory Osterren aipu batekin amaitu nahi nuke:

Oraindik ziur ez bazaude
Bizitzako bidea aukeratu genuen,
Eta ez dakizu zergatik
Hasi zure lan-bidaia,
Apurtu korridoreetako bonbillak -
Jendeak "Eskerrik asko" esango dizu.
Jendeari lagunduko diozu
Aurreztu elektrizitatea.

Iturria: www.habr.com

Gehitu iruzkin berria