Docker: shawara mara kyau

Docker: shawara mara kyau

Lokacin da nake koyon tuƙi mota, a farkon darasi na farko malamin ya shiga cikin tsaka-tsaki a baya, sannan ya ce kada ku yi haka - ko kadan. Na tuna da wannan doka nan da nan kuma har tsawon rayuwata.

Kuna karanta "Bad Advice" na Grigory Oster ga yara, kuma kun ga yadda sauƙi da sauƙi ya bayyana a kansu cewa kada su yi wannan.

An rubuta labarai da yawa kan yadda ake rubuta Dockerfile daidai. Amma ban ci karo da umarni kan yadda ake rubuta Dockerfiles ba daidai ba. Ina cike wannan gibin. Kuma watakila a cikin ayyukan da na sami tallafi, za a sami raguwar irin waɗannan fayilolin docker.

Duk haruffa, yanayi da Dockerfile na tatsuniyoyi ne. Idan kun gane kanku, kuyi hakuri.

Ƙirƙirar Dockerfile, abin ban tsoro da ban tsoro

Peter (Babban mai haɓaka java/rubby/php): Abokin aikin Vasily, kun riga kun ɗora sabon tsarin zuwa Docker?
Vasily (junior): A'a, ba ni da lokaci, ba zan iya gano shi da wannan Docker ba. Akwai labarai da yawa akansa, yana da ban tsoro.

Peter: Muna da ranar ƙarshe shekara guda da ta wuce. Bari in taimake ka, za mu gane shi a cikin tsari. Faɗa mini abin da ba ya aiki a gare ku.

Vasily: Ba zan iya zaɓar ainihin hoto don ya zama kaɗan ba, amma yana da duk abin da kuke buƙata.
Peter: Ɗauki hoton ubuntu, yana da duk abin da kuke buƙata. Kuma abin da ke da yawa abubuwan da ba dole ba za su zo da amfani daga baya. Kuma kar a manta da sanya sabon tag domin sigar ta kasance ta zamani.

Kuma layin farko ya bayyana a cikin Dockerfile:

FROM ubuntu:latest

Bitrus: Menene na gaba, me muka yi amfani da shi wajen rubuta tsarin mu?
Vasily: Don haka ruby, akwai sabar gidan yanar gizo kuma yakamata a ƙaddamar da wasu nau'ikan daemon sabis.
Bitrus: Ee, abin da muke bukata: ruby, bundler, nodejs, imagemagick da abin da sauransu ... Kuma a lokaci guda, yi haɓakawa don samun sababbin fakitin.
Vasily: Kuma ba za mu ƙirƙiri mai amfani ba don kada mu kasance ƙarƙashin tushe?
Bitrus: Fuck shi, to, har yanzu dole ne ku yi wawa da haƙƙoƙinku.
Vasily: Ina buƙatar lokaci, kusan mintuna 15, don haɗa su duka cikin umarni ɗaya, na karanta cewa…
(Bitrus cikin rashin kunya ya katse ƙwararrun ƙwararru kuma mai hankali sosai.)
Bitrus: Rubuta cikin umarni daban-daban, zai kasance da sauƙin karantawa.

Dockerfile yana girma:

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

Sai Igor Ivanovich, DevOps (amma fiye da Ops fiye da Dev), ya fashe cikin ofishin yana ihu:

AI: Petya, masu haɓaka ku sun sake karya bayanan abinci, yaushe wannan zai ƙare...

Bayan wani karamin rikici, Igor Ivanovich ya kwantar da hankali kuma ya fara gano abin da abokan aikinsa ke yi a nan.

AI: me kake yi?
Vasily: Bitrus yana taimaka mani ƙirƙirar Dockerfile don sabon tsari.
AI: Bari in duba ... Me kuka rubuta a nan, kuna tsaftace wurin ajiya tare da umarni daban, wannan ƙarin Layer ne ... Amma ta yaya kuke shigar da masu dogara idan ba ku kwafi Gemfile ba! Kuma a gaba ɗaya, wannan ba shi da kyau.
Peter: Don Allah ku ci gaba da harkokinku, za mu gane ko ta yaya.

Igor Ivanovich ya yi baƙin ciki kuma ya fita don gano wanda ya karya bayanan.

Bitrus: Ee, amma ya yi daidai game da lambar, muna buƙatar tura shi cikin hoton. Kuma bari mu shigar da ssh da mai kulawa nan da nan, in ba haka ba za mu fara daemons.

Vasily: Sannan zan fara kwafi Gemfile da Gemfile.lock, sannan zan shigar da komai, sannan zan kwafi dukkan aikin. Idan Gemfile bai canza ba, za a ɗauki Layer daga cache.
Bitrus: Me ya sa kuke duka tare da waɗannan yadudduka, kwafi komai lokaci guda. Kwafi nan da nan. Layin farko.

Dockerfile yanzu yayi kama da haka:

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

Bitrus: To, me kuma? Kuna da saiti don mai kulawa?
Vasily: Ba, ba. Amma zan yi da sauri.
Bitrus: To, za ku yi. Yanzu bari mu zana rubutun init wanda zai ƙaddamar da komai. Ok, don haka kun fara ssh, tare da nohup, domin mu iya haɗawa da akwati mu ga abin da ya faru. Sa'an nan kuma gudu supervisor a cikin hanya guda. To, sai ku gudu fasinja.
Tambaya: Amma na karanta cewa ya kamata a yi tsari guda ɗaya, don haka Docker zai san cewa wani abu ya ɓace kuma zai iya sake kunna akwati.
P: Kada ku dame kan ku da shirme. Kuma gaba ɗaya, ta yaya? Ta yaya kuke gudanar da waɗannan duka a cikin tsari ɗaya? Bari Igor Ivanovich yayi tunani game da kwanciyar hankali, ba don komai ba ne ya karbi albashi. Aikinmu shine rubuta code. Kuma gaba ɗaya, bari ya ce na gode don mun rubuta masa Dockfile.

Minti 10 da bidiyo biyu game da kuliyoyi daga baya.

Tambaya: Na yi komai. Na kara sharhi.
P: Nuna min!

Sabon sigar 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: Babban, ina son shi. Kuma maganganun suna cikin Rashanci, dacewa kuma ana iya karantawa, kowa zai yi aiki kamar haka. Na koya muku komai, za ku iya yin sauran da kanku. Muje mu sha kofi...

To, yanzu muna da mummunan Dockerfile, wanda ganinsa zai sa Igor Ivanovich ya so ya daina kuma idanunsa za su ji rauni na wani mako. Dockerfile, ba shakka, na iya zama mafi muni, babu iyaka ga kamala. Amma da farko, wannan zai yi.

Ina so in ƙare da magana daga Grigory Oster:

Idan har yanzu ba ku da tabbas
Mun zabi hanyar rayuwa,
Kuma ba ku san dalilin ba
Fara tafiyar aikinku,
Katse kwararan fitila a cikin hallways -
Mutane za su ce maka "Na gode".
Za ku taimaki mutane
Ajiye wutar lantarki.

source: www.habr.com

Add a comment