Docker : move konsèy

Docker : move konsèy

Lè m 'te aprann kondwi yon machin, nan premye leson an enstriktè a te kondwi nan entèseksyon an nan do, epi Lè sa a, te di ke ou pa ta dwe fè sa - pa janm ditou. Mwen sonje règ sa a imedyatman epi pou tout rès lavi mwen.

Ou li "Move konsèy" pa Grigory Oster pou timoun yo, epi ou wè ki jan fasil ak natirèlman li douvan sou yo ke yo pa ta dwe fè sa.

Yon anpil nan atik yo te ekri sou kòman yo ekri yon Dockerfile kòrèkteman. Men, mwen pa t 'vin jwenn enstriksyon sou kòman yo ekri move Dockerfiles. Mwen ranpli espas sa a. E petèt nan pwojè yo ke mwen resevwa sipò, pral gen mwens dockerfile sa yo.

Tout karaktè, sitiyasyon ak Dockerfile yo se fiktif. Si ou rekonèt tèt ou, eskize.

Kreye yon Dockerfile, menasan ak terib

Peter (Senior java/rubby/php developer): Kolèg Vasily, èske ou deja telechaje yon nouvo modil nan Docker?
Vasily (junior): Non, mwen pat gen tan, mwen pa ka konprann li ak Docker sa a. Gen anpil atik sou li, li se tèt vire.

Peter: Nou te gen yon delè yon ane de sa. Kite m ede w, nou pral kalkile li nan pwosesis la. Di m sa ki pa mache pou ou.

Vasily: Mwen pa ka chwazi yon imaj debaz pou li minim, men li gen tout sa ou bezwen.
Peter: Pran imaj ubuntu a, li gen tout sa ou bezwen. Ak sa ki se yon anpil nan bagay ki pa nesesè yo pral vin an sou la men pita. Epi pa bliye mete dènye tag la pou vèsyon an toujou dènye.

Ak premye liy lan parèt nan Dockerfile la:

FROM ubuntu:latest

Peter: Ki sa ki vin apre, kisa nou te itilize pou ekri modil nou an?
Vasily: Se konsa, Ruby, gen yon sèvè entènèt ak yon koup nan demon sèvis yo ta dwe lanse.
Peter: Wi, kisa nou bezwen: ruby, bundler, nodejs, imagemagick ak ki lòt bagay... E an menm tan, fè yon ajou pou definitivman jwenn nouvo pakè.
Vasily: Epi nou pap kreye yon itilizatè pou nou pa pral anba rasin?
Peter: fout, ebyen fok ou toujou ap fout ak dwa yo.
Vasily: Mwen bezwen tan, apeprè 15 minit, pou mete tout ansanm nan yon sèl kòmandman, mwen li sa...
(Pyè entèwonp malonnèt jinyò a metikuleu ak trè entelijan.)
Peter: Ekri nan kòmandman separe, li pral pi fasil pou li.

Dockerfile ap grandi:

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

Lè sa a, Igor Ivanovich, DevOps (men plis Ops pase Dev), pete nan biwo a t'ap rele byen fò:

AI: Petya, devlopè w yo kraze baz done manje a ankò, ki lè sa a pral fini...

Apre yon ti akrochaj, Igor Ivanovich refwadi epi li kòmanse chèche konnen ki sa kòlèg li yo ap fè isit la.

AI: Kisa w ap fè?
Vasily: Peter ap ede m kreye yon Dockerfile pou yon nouvo modil.
AI: Kite m 'pran yon gade ... Ki sa ou te ekri isit la, ou netwaye depo a ak yon lòd separe, sa a se yon kouch adisyonèl ... Men, ki jan ou enstale depandans si ou pa te kopye Gemfile la! Ak an jeneral, sa a pa bon.
Peter: Tanpri ale nan biznis ou, nou pral kalkile li yon jan kanmenm.

Igor Ivanovich fè yon soupi tris epi li ale pou konnen ki moun ki te kraze baz done a.

Peter: Wi, men li te gen rezon sou kòd la, nou bezwen pouse li nan imaj la. Epi ann imedyatman enstale ssh ak sipèvizè, otreman nou pral kòmanse demon yo.

Vasily: Lè sa a, mwen pral premye kopye Gemfile la ak Gemfile.lock, Lè sa a, mwen pral enstale tout bagay, ak Lè sa a, mwen pral kopye tout pwojè a. Si Gemfile a pa chanje, yo pral pran kouch nan kachèt la.
Peter: Poukisa nou tout ak kouch sa yo, kopye tout bagay an menm tan. Kopi touswit. Premye liy lan.

Dockerfile kounye a sanble tankou sa a:

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: ebyen kisa? Èske ou gen konfigirasyon pou sipèvizè?
Vasily: non non. Men, mwen pral fè li byen vit.
Peter: Lè sa a, ou pral fè li. Koulye a, ann trase yon script init ki pral lanse tout bagay. Oke, kidonk, ou kòmanse ssh, ak nohup, pou nou ka konekte ak veso a epi wè sa ki mal. Lè sa a, kouri sipèvizè nan menm fason an. Oke, Lè sa a, ou jis kouri pasaje.
K: Men, mwen li ke ta dwe gen yon sèl pwosesis, kidonk Docker pral konnen ke yon bagay te ale mal epi li ka rekòmanse veso a.
P: Pa deranje tèt ou ak istwa san sans. Ak an jeneral, ki jan? Ki jan ou fè tout bagay sa yo nan yon sèl pwosesis? Kite Igor Ivanovich reflechi sou estabilite, se pa pou anyen ke li resevwa yon salè. Travay nou se ekri kòd. Epi an jeneral, kite l di mèsi paske nou te ekri Dockefile la pou li.

10 minit ak de videyo sou chat pita.

K: Mwen te fè tout bagay. Mwen te ajoute plis kòmantè.
P: Montre mwen!

Dènye vèsyon 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: Bon, mwen renmen li. Ak kòmantè yo nan Ris, pratik ak lizib, tout moun ta travay konsa. Mwen te anseye ou tout bagay, ou ka fè rès la tèt ou. Ann al pran yon ti kafe...

Oke, kounye a nou gen yon Dockerfile parfe terib, je a ki pral fè Igor Ivanovich vle kite fimen ak je l 'ap fè mal pou yon lòt semèn. Dockerfile a, nan kou, ta ka menm vin pi mal, pa gen okenn limit nan pèfeksyon. Men, pou yon kòmansman, sa a pral fè.

Mwen ta renmen fini ak yon sitasyon nan Grigory Oster:

Si ou poko sèten
Nou te chwazi chemen lavi a,
Epi ou pa konnen poukisa
Kòmanse vwayaj travay ou,
Kraze anpoul yo nan koulwa yo -
Moun pral di ou "Mèsi".
Ou pral ede pèp la
Sove elektrisite.

Sous: www.habr.com

Add nouvo kòmantè