Docker: imọran buburu

Docker: imọran buburu

Nigbati mo n kọ ẹkọ lati wakọ ọkọ ayọkẹlẹ kan, ni ẹkọ akọkọ ti olukọ naa wa sinu ikorita ni idakeji, ati lẹhinna sọ pe o ko gbọdọ ṣe bẹ - rara rara. Mo ranti ofin yii lẹsẹkẹsẹ ati fun iyoku igbesi aye mi.

O ka "Imọran Buburu" nipasẹ Grigory Oster si awọn ọmọde, ati pe o rii bi o ṣe rọrun ati nipa ti ara wọn pe wọn ko yẹ ki o ṣe eyi.

Ọpọlọpọ awọn nkan ni a ti kọ lori bii o ṣe le kọ Dockerfile ni deede. Ṣugbọn Emi ko wa awọn itọnisọna lori bi a ṣe le kọ Dockerfiles ti ko tọ. Mo n kun aafo yii. Ati boya ninu awọn iṣẹ akanṣe ti Mo gba atilẹyin, iru awọn faili docker yoo dinku.

Gbogbo awọn ohun kikọ, awọn ipo ati Dockerfile jẹ arosọ. Ti o ba da ara rẹ mọ, ma binu.

Ṣiṣẹda Dockerfile, ominous ati ẹru

Peter (Alagba java/rubby/php Olùgbéejáde): Vasily ẹlẹgbẹ rẹ, ṣe o ti gbe module tuntun kan tẹlẹ si Docker?
Vasily (junior): Rara, Emi ko ni akoko, Emi ko le ro ero rẹ pẹlu Docker yii. Ọpọlọpọ awọn nkan lo wa lori rẹ, o jẹ dizzying.

Peteru: A ni akoko ipari ni ọdun kan sẹhin. Jẹ ki n ran ọ lọwọ, a yoo ro ero rẹ ninu ilana naa. Sọ fun mi kini ko ṣiṣẹ fun ọ.

Vasily: Emi ko le yan aworan ipilẹ ki o jẹ iwonba, ṣugbọn o ni ohun gbogbo ti o nilo.
Peteru: Ya aworan ubuntu, o ni ohun gbogbo ti o nilo. Ati pe kini ọpọlọpọ awọn ohun ti ko ni dandan yoo wa ni ọwọ nigbamii. Maṣe gbagbe lati fi aami tuntun sii ki ẹya naa jẹ tuntun nigbagbogbo.

Ati laini akọkọ han ninu Dockerfile:

FROM ubuntu:latest

Peteru: Kini atẹle, kini a lo lati kọ module wa?
Vasily: Nitorinaa ruby, olupin wẹẹbu kan wa ati pe awọn daemons iṣẹ meji yẹ ki o ṣe ifilọlẹ.
Peteru: Bẹẹni, kini a nilo: ruby, bundler, nodejs, imagemagick ati kini ohun miiran… Ati ni akoko kanna, ṣe igbesoke lati ni pato gba awọn idii tuntun.
Vasily: Ati pe a kii yoo ṣẹda olumulo kan ki a ma ba wa labẹ gbongbo?
Peteru: Fokii, lẹhinna o tun ni lati ṣe aṣiwere pẹlu awọn ẹtọ.
Vasily: Mo nilo akoko, bii iṣẹju 15, lati fi gbogbo rẹ papọ sinu aṣẹ kan, Mo ka pe…
(Peteru fi aibikita ba ọmọ kekere ti o mọye ati ọlọgbọn pupọ.)
Peteru: Kọ sinu awọn aṣẹ lọtọ, yoo rọrun lati ka.

Dockerfile dagba:

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ẹhinna Igor Ivanovich, DevOps (ṣugbọn diẹ sii Ops ju Dev), bu sinu ọfiisi ti n pariwo:

AI: Petya, awọn olupilẹṣẹ rẹ fọ data data ounjẹ lẹẹkansi, nigbawo ni eyi yoo pari…

Lẹhin ijakadi kekere kan, Igor Ivanovich tutu ati bẹrẹ lati wa ohun ti awọn ẹlẹgbẹ rẹ n ṣe nibi.

AI: Kini o nse?
Vasily: Peter n ṣe iranlọwọ fun mi lati ṣẹda Dockerfile kan fun module tuntun kan.
AI: Jẹ ki n wo ... Kini o kọ nibi, o nu ibi-ipamọ pẹlu aṣẹ ti o yatọ, eyi jẹ afikun Layer ... Ṣugbọn bawo ni o ṣe fi awọn igbẹkẹle sii ti o ko ba ti daakọ Gemfile! Ati ni gbogbogbo, eyi ko dara.
Peteru: Jọwọ lọ nipa iṣowo rẹ, a yoo ṣe akiyesi rẹ bakan.

Igor Ivanovich kerora o si lọ kuro lati mọ ẹniti o fọ data naa.

Peteru: Bẹẹni, ṣugbọn o tọ nipa koodu naa, a nilo lati Titari si aworan naa. Ati pe jẹ ki a fi sori ẹrọ ssh ati alabojuto lẹsẹkẹsẹ, bibẹẹkọ a yoo bẹrẹ awọn daemons.

Vasily: Lẹhinna Emi yoo kọkọ daakọ Gemfile ati Gemfile.lock, lẹhinna Emi yoo fi ohun gbogbo sori ẹrọ, lẹhinna Emi yoo daakọ gbogbo iṣẹ akanṣe naa. Ti Gemfile ko ba yipada, Layer yoo gba lati kaṣe.
Peteru: Kini idi ti gbogbo yin pẹlu awọn ipele wọnyi, daakọ ohun gbogbo ni ẹẹkan. Daakọ lẹsẹkẹsẹ. Laini akọkọ pupọ.

Dockerfile bayi dabi eyi:

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

Peteru: Nitorina, kini o tẹle? Ṣe o ni awọn atunto fun alabojuto?
Vasily: Bẹẹkọ, rara. Ṣugbọn Emi yoo ṣe ni yarayara.
Peteru: Lẹhinna iwọ yoo ṣe. Jẹ ki a ṣe apẹrẹ iwe afọwọkọ init kan ti yoo ṣe ifilọlẹ ohun gbogbo. O dara, nitorinaa o bẹrẹ ssh, pẹlu nohup, ki a le sopọ si apo eiyan ki o wo kini aṣiṣe. Lẹhinna ṣiṣẹ alabojuto ni ọna kanna. O dara, lẹhinna o kan rin irin-ajo.
Q: Ṣugbọn Mo ka pe ilana kan yẹ ki o wa, nitorinaa Docker yoo mọ pe nkan kan ti ko tọ ati pe o le tun eiyan naa bẹrẹ.
P: Maṣe yọ ori rẹ lẹnu pẹlu ọrọ isọkusọ. Ati ni gbogbogbo, bawo ni? Bawo ni o ṣe ṣiṣe gbogbo eyi ni ilana kan? Jẹ ki Igor Ivanovich ronu nipa iduroṣinṣin, kii ṣe fun ohunkohun ti o gba owo-ọya. Iṣẹ wa ni lati kọ koodu. Ati ni gbogbogbo, jẹ ki o sọ o ṣeun pe a kowe Dockfile fun u.

Awọn iṣẹju 10 ati awọn fidio meji nipa awọn ologbo nigbamii.

Q: Mo ti ṣe ohun gbogbo. Mo ti fi kun diẹ comments.
P: Fihan mi!

Ẹya tuntun ti 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: O dara, Mo fẹran rẹ. Ati awọn asọye wa ni Russian, rọrun ati kika, gbogbo eniyan yoo ṣiṣẹ bi iyẹn. Mo kọ ọ ohun gbogbo, o le ṣe awọn iyokù funrararẹ. Jẹ ki a lọ jẹ kofi diẹ...

O dara, ni bayi a ni Dockerfile ti o buruju, oju eyiti yoo jẹ ki Igor Ivanovich fẹ lati dawọ silẹ ati pe oju rẹ yoo ṣe ipalara fun ọsẹ miiran. Dockerfile, nitorinaa, le buru paapaa, ko si opin si pipe. Ṣugbọn fun ibẹrẹ, eyi yoo ṣe.

Emi yoo fẹ lati pari pẹlu agbasọ kan lati ọdọ Grigory Oster:

Ti o ko ba ni idaniloju sibẹsibẹ
A yan ọna igbesi aye,
Ati pe o ko mọ idi
Bẹrẹ irin-ajo iṣẹ rẹ,
Fọ awọn gilobu ina ni awọn ẹnu-ọna -
Eniyan yoo sọ "O ṣeun" fun ọ.
Iwọ yoo ran awọn eniyan lọwọ
Fi itanna pamọ.

orisun: www.habr.com

Fi ọrọìwòye kun