Docker: ingcebiso embi

Docker: ingcebiso embi

Xa ndandifunda ukuqhuba inqwelo-mafutha, kwisifundo sokuqala umqeqeshi waqhuba waya ngasemva kwisiphambuka, wathi ungakwenzi oko—ungaze ukwenze konke konke. Ndawukhumbula lo mthetho ngoko nangoko kwaye ubomi bam bonke.

Ufunda "Isiluleko esibi" nguGrigory Oster kubantwana, kwaye ubona ukuba kulula kangakanani kwaye ngokwemvelo kuvela kubo ukuba akufanele benze oku.

Amanqaku amaninzi abhaliwe malunga nendlela yokubhala iDockerfile ngokuchanekileyo. Kodwa andizange ndifumane imiyalelo malunga nendlela yokubhala iiDockerfiles ezingachanekanga. Ndivala esi sikhewu. Kwaye mhlawumbi kwiiprojekthi endizifumanayo inkxaso, kuya kuba mbalwa ii-dockerfiles ezinjalo.

Bonke abalinganiswa, iimeko kunye neDockerfile yintsomi. Ukuba uyazazi, uxolo.

Ukwenza iDockerfile, iyoyikeka kwaye yoyikeka

UPetros (umphuhlisi ophezulu we-java/rubby/php): Umlingane uVasily, sele ulayishe imodyuli entsha kwiDocker?
UVasily (omncinci): Hayi, bendingenaxesha, andikwazi kuyifumana le Docker. Kukho amanqaku amaninzi kuyo, iyaphazamisa.

UPeter: Sasinomhla wokugqibela kunyaka odlulileyo. Makhe ndikuncede, siza kuyifumana kwinkqubo. Ndixelele into engasebenzi kuwe.

UVasily: Andikwazi ukukhetha umfanekiso osisiseko ukuze ube mncinci, kodwa unayo yonke into oyifunayo.
UPeter: Thatha umfanekiso ubuntuInayo yonke into oyifunayo. Naziphi na ezinye izinto ziya kuba luncedo kamva. Kwaye ungalibali ukuyibeka uphawu "lwamva nje" ukuze ihlale iyeyona nguqulelo yamva nje.

Kwaye umgca wokuqala uvela kwiDockerfile:

FROM ubuntu:latest

UPeter: Yintoni elandelayo, sisebenzise ntoni ukubhala imodyuli yethu?
UVasily: Ke iruby, kukho iseva yewebhu kwaye isibini seedemon zenkonzo kufuneka ziqaliswe.
UPetros: Ewe, yintoni esiyidingayo: i-ruby, i-bundler, i-nodejs, i-imagemagick kunye nantoni na enye ... Kwaye kwangaxeshanye, yenza uphuculo ukuze ufumane iiphakheji ezintsha.
UVasily: Kwaye asiyi kudala umsebenzisi ukuze singabi phantsi kweengcambu?
UPeter: Fuck it, ke kusafuneka uqhathe ngamalungelo.
UVasily: Ndifuna ixesha, malunga nemizuzu eyi-15, ukuyibeka yonke into ibe ngumyalelo omnye, ndifunde ukuba ...
(UPetros uphazamisana nomntwana onenkathalo nokrelekrele kakhulu.)
UPetros: Bhala kwimiyalelo eyahlukileyo, kuya kuba 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/*

Emva koko u-Igor Ivanovich, i-DevOps (kodwa i-Ops engaphezulu kune-Dev), yangena eofisini ikhwaza:

AI: Petya, abaphuhlisi bakho baphule isiseko sedatha kwakhona, iya kuphela nini le nto...

Emva komlo omncinci, u-Igor Ivanovich uyaphola aze aqalise ukufumanisa ukuba benza ntoni oogxa bakhe apha.

ANDI: Wenza ntoni?
UVasily: UPeter uyandinceda ukwenza iDockerfile yemodyuli entsha.
I-AI: Makhe ndijonge ... Yintoni obhale apha, uhlambulule indawo yokugcina kunye nomyalelo ohlukeneyo, olu luluhlu olongezelelweyo ... Kodwa ufaka njani ukuxhomekeka ukuba awuzange ukopishe iGemfile! Kwaye ngokubanzi, oku akulunganga.
UPetros: Nceda uhambe malunga neshishini lakho, siza kuyifumana ngandlela-thile.

U-Igor Ivanovich uyancwina ngokudabukisayo kwaye ashiye ukuba abone ukuba ngubani owaphula i-database.

UPetros: Ewe, kodwa wayenyanisile malunga nekhowudi, kufuneka siyityhale emfanekisweni. Kwaye masifake kwangoko i-ssh kunye nomphathi, kungenjalo siya kuqalisa iidemon.

UVasily: Emva koko ndiya kuqala ukukopisha iGemfile kunye neGemfile.lock, emva koko ndiya kufaka yonke into, kwaye ndiya kukopisha yonke iprojekthi. Ukuba iGemfile ayitshintshi, umaleko uya kuthathwa kwi-cache.
UPetros: Kutheni nonke nina nala macandelo, kopisha yonke into kanye. Khuphela kwangoko. Umgca wokuqala.

I-Dockerfile ngoku ijongeka ngolu hlobo:

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

UPetros: Ngoko, yintoni elandelayo? Ngaba unayo imimiselo yomphathi?
UVasily: Hayi, hayi. Kodwa ndiya kuyenza ngokukhawuleza.
UPetros: Emva koko uya kuyenza. Ngoku makhe sizobe iskripthi se-init esiya kuzisa yonke into. Kulungile, ke uqala ssh, nge-nohup, ukuze sikwazi ukuqhagamshela kwisikhongozeli kwaye sibone ukuba yintoni engalunganga. Emva koko sebenzisa umphathi ngendlela efanayo. Ke, ubaleka nje umgibeli.
Q: Kodwa ndifundile ukuba makubekho inkqubo enye, ke uDocker uya kwazi ukuba kukho into engahambi kakuhle kwaye angaphinda aqalise isingxobo.
P: Sukuhlupha intloko yakho ngobubhanxa. Kwaye ngokubanzi, njani? Uyiqhuba njani yonke le nto kwinkqubo enye? Vumela u-Igor Ivanovich acinge ngokuzinza, kungekhona into yokuba ufumana umvuzo. Umsebenzi wethu kukubhala ikhowudi. Kwaye ngokubanzi, makathi enkosi ngokuba simbhalele iDockefile.

Imizuzu eli-10 kunye neevidiyo ezimbini malunga neekati kamva.

Q: Ndenze yonke into. Ndongeze ezinye izimvo.
P: Ndibonise!

Inguqulelo yamva nje yeDockerfile:

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”]

Mna: Kulungile, ndiyayithanda. Kwaye amagqabantshintshi angesiRashiya, aluncedo kwaye ayafundeka, wonke umntu uya kusebenza ngolo hlobo. Ndikufundise yonke into, okunye ungakwenza ngokwakho. Masiyokusela ikofu...

Ewe, ngoku sine-Dockerfile eyoyikisayo, umbono oya kwenza ukuba u-Igor Ivanovich afune ukuyeka kwaye amehlo akhe aya kubuhlungu enye iveki. I-Dockerfile, ngokuqinisekileyo, inokuba yimbi ngakumbi, akukho mda kwimfezeko. Kodwa okokuqala, oku kuya kwenza.

Ndingathanda ukugqiba ngesicatshulwa esivela kuGrigory Oster:

Ukuba awuqinisekanga okwangoku
Sakhetha indlela ebomini,
Kwaye awuyazi ukuba kutheni
Qala uhambo lwakho lomsebenzi,
Zaphula iibhalbhu zokukhanya ezipasejini -
Abantu baya kuthi "Enkosi" kuwe.
Uya kunceda abantu
Yonga umbane.

umthombo: www.habr.com

Thenga ukusingathwa okuthembekileyo kwiindawo ezinokhuseleko lweDDoS, iiseva zeVPS VDS 🔥 Thenga ukusingathwa kwewebhusayithi okuthembekileyo ngokhuseleko lwe-DDoS, iiseva zeVPS VDS | ProHoster