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