I-Docker: iseluleko esibi

I-Docker: iseluleko esibi

Lapho ngifunda ukushayela imoto, esifundweni sokuqala umfundisi wangena ezimpambanweni zomgwaqo ehlehla, wabe esethi ungakwenzi lokho - ungalokothi nakancane. Ngakhumbula lo mthetho ngokushesha futhi ukuphila kwami ​​konke.

Ufundela izingane "Iseluleko Esibi" sikaGrigory Oster, futhi ubona ukuthi kulula kangakanani futhi ngokwemvelo ukuthi zifike kuzo ukuthi akufanele zikwenze lokhu.

Kubhalwe izindatshana eziningi zokuthi ungabhala kanjani i-Dockerfile ngendlela efanele. Kepha angizange ngithole imiyalo yokuthi ungabhala kanjani ama-Dockerfiles angalungile. Ngivala lesi sikhala. Futhi mhlawumbe kumaphrojekthi engithola ukwesekwa, kuzoba nama-dockerfile ambalwa anjalo.

Zonke izinhlamvu, izimo kanye ne-Dockerfile zingamanga. Uma uzazi ukuthi ungubani, uxolo.

Ukudala i-Dockerfile, esabekayo futhi esabekayo

U-Peter (Umthuthukisi Omkhulu we-java/rubby/php): Uzakwethu u-Vasily, ingabe usuyilayishile kakade imojuli entsha ku-Docker?
UVasily (junior): Cha, anginaso isikhathi, angikwazi ukukuthola ngale Docker. Ziningi kakhulu izindatshana ezikuwo, kuyadida.

UPeter: Sasinomnqamulajuqu onyakeni odlule. Ake ngikusize, sizokucacisa ngokuqhubekayo. Ngitshele ukuthi yini engasebenzi kuwe.

UVasily: Angikwazi ukukhetha isithombe esiyisisekelo ukuze sibe sincane, kodwa sinakho konke okudingayo.
Peter: Thatha isithombe sobuntu, sinakho konke okudingayo. Futhi yiziphi izinto eziningi ezingadingekile zizoba usizo kamuva. Futhi ungakhohlwa ukubeka ithegi yakamuva ukuze inguqulo ihlale ingeyakamuva.

Futhi umugqa wokuqala uvela ku-Dockerfile:

FROM ubuntu:latest

Peter: Yini elandelayo, yini esiyisebenzise ukubhala imojula yethu?
U-Vasily: Ngakho-ke i-ruby, kukhona iseva yewebhu futhi kufanele kwethulwe amademoni ambalwa enkonzo.
Peter: Yebo, yini esiyidingayo: i-ruby, i-bundler, i-nodejs, i-imagemagick nokunye... Futhi ngesikhathi esifanayo, yenza ukuthuthukiswa ukuze nakanjani uthole amaphakheji amasha.
UVasily: Futhi ngeke sidale umsebenzisi ukuze singabi ngaphansi kwezimpande?
UPeter: Fuck it, kusafanele ukhohlise ngamalungelo.
UVasily: Ngidinga isikhathi, cishe imizuzu eyi-15, ukuze ngihlanganise konke kube umyalo owodwa, ngifunde ukuthi...
(UPetru uphazamisa ingane ehlakaniphile futhi ehlakaniphe kakhulu.)
UPetru: Bhala ngemiyalelo ehlukene, kuzoba lula ukufunda.

I-Dockerfile iyakhula:

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

Khona-ke u-Igor Ivanovich, i-DevOps (kodwa i-Ops eningi kune-Dev), ingena ehhovisi imemeza:

I-AI: Petya, abathuthukisi bakho baphule isizindalwazi sokudla futhi, kuzophela nini lokhu...

Ngemva kwengxabano encane, u-Igor Ivanovich uyaphola futhi uqala ukuthola ukuthi benzani ozakwabo lapha.

AI: Wenzani?
UVasily: UPeter uyangisiza ukuthi ngenze i-Dockerfile yemojuli entsha.
I-AI: Ake ngibheke ... Yini oyibhale lapha, uhlanza inqolobane ngomyalo ohlukile, lokhu kuyingqimba eyengeziwe ... Kodwa ufaka kanjani ukuncika uma ungazange ukopishe i-Gemfile! Futhi ngokuvamile, lokhu akukuhle.
UPeter: Ngicela uhambe ngebhizinisi lakho, sizolithola ngandlela thize.

U-Igor Ivanovich uyabubula ngokudabukisayo futhi ushiya ukuze athole ukuthi ubani ophule i-database.

UPetru: Yebo, kodwa wayeqinisile mayelana nekhodi, sidinga ukuyiphusha esithombeni. Futhi masifake ngokushesha i-ssh nomphathi, ngaphandle kwalokho sizoqala amademoni.

UVasily: Ngemva kwalokho ngizokopisha kuqala i-Gemfile ne-Gemfile.lock, bese ngifaka yonke into, bese ngikopisha yonke iphrojekthi. Uma i-Gemfile ingashintshi, isendlalelo sizothathwa kunqolobane.
UPetru: Kungani nonke ninalezi zingqimba, kopisha konke ngesikhathi esisodwa. Kopisha ngokushesha. Umugqa wokuqala kakhulu.

I-Dockerfile manje ibukeka kanje:

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

UPetru: Ngakho, yini elandelayo? Ingabe unazo izilungiselelo zomphathi?
UVasily: Cha, cha. Kodwa ngizokwenza ngokushesha.
UPetru: Khona-ke uzokwenza. Manje ake sidwebe iskripthi se-init esizokwethula yonke into. Kulungile, ngakho-ke uqala ssh, nge-nohup, ukuze sikwazi ukuxhuma esitsheni futhi sibone ukuthi yini engahambanga kahle. Bese ugijima umphathi ngendlela efanayo. Hhayi-ke, bese ugijima umgibeli.
Q: Kodwa ngifunde ukuthi kufanele kube nenqubo eyodwa, ngakho u-Docker uzokwazi ukuthi kukhona okungahambanga kahle futhi angaqala kabusha isiqukathi.
P: Ungahluphi ikhanda lakho ngombhedo. Futhi ngokuvamile, kanjani? Ukwenza kanjani konke lokhu ngenqubo eyodwa? Vumela u-Igor Ivanovich acabange ngokuzinza, akukhona lutho ukuthi uthola iholo. Umsebenzi wethu ukubhala ikhodi. Futhi ngokujwayelekile, makabonge ngokuthi simbhalele i-Dockefile.

Imizuzu engu-10 namavidiyo amabili mayelana namakati kamuva.

Umbuzo: Ngenze konke. Ngengeze amanye amazwana.
P: Ngibonise!

Inguqulo yakamuva ye-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: Kuhle, ngiyakuthanda. Futhi imibono ingesiRussia, ilula futhi iyafundeka, wonke umuntu angasebenza kanjalo. Ngikufundise konke, okunye ungakwenza ngokwakho. Asihambe siphuze ikhofi...

Manje, manje sine-Dockerfile embi kakhulu, ukubona okuzokwenza u-Igor Ivanovich afune ukuyeka futhi amehlo akhe azobuhlungu elinye isonto. I-Dockerfile, yiqiniso, ingaba yimbi nakakhulu, akukho mkhawulo ekupheleleni. Kodwa okokuqala, lokhu kuzokwenza.

Ngingathanda ukuphetha ngesicaphuna esivela ku-Grigory Oster:

Uma ungakaqiniseki
Sakhetha indlela yokuphila,
Futhi awazi ukuthi kungani
Qala uhambo lwakho lomsebenzi,
Phula amalambu emaphasishi -
Abantu bazothi "Ngiyabonga" kuwe.
Uzosiza abantu
Yonga ugesi.

Source: www.habr.com

Engeza amazwana