Docker pêlîstokek e an na? An jî hîn rast e?

Hemûyan re merheba!

Ez bi rastî dixwazim rasterast biçim mijarê, lê rasttir e ku meriv hinekî qala çîroka xwe bikim:

entry

Ez bernamesazek ​​xwedî ezmûn im di pêşxistina serîlêdanên rûpela yekane, scala/java û nodejs de li ser serverê.

Ji bo demek pir dirêj (bê guman du-sê sal), ez di wê baweriyê de bûm ku Docker manna ji bihuştê ye û bi gelemperî amûrek pir xweş e û bê guman her pêşdebir divê bikaribe wê bikar bîne. Û ji vê yekê derdikeve ku her pêşdebir divê Docker li ser makîneya xweya herêmî sazkirî be. Li ser nêrîna min çi ye, li valahiyên ku li ser heman hh hatine şandin binihêrin. Her duyemîn behskirina dokerê vedihewîne, û heke hûn xwediyê wê bin, ev ê bibe berjewendiya weya pêşbaziyê 😉

Di riya xwe de, min bi gelek kesan re, bi helwestên wan ên cihêreng ên li hember Docker û ekosîstema wê re hevdîtin. Hinekan got ku ev tiştek hêsan e ku fonksiyona cross-platform garantî dike. Yên diduyan fêhm nedikirin çima divê ew di konteyniran de birevin û çi sûd jê tê, yê sêyemîn qet eleqedar nedikir û xwe aciz nedikir (wan tenê kod nivîsand û çûn malê - ez ji wan hesûd dikim, rê :)

Sedemên ji bo bikaranîna

Çima min docker bikar anî? Dibe ku ji ber sedemên jêrîn:

  • destpêkirina databasê, 99% sepanan wan bikar tînin
  • destpêkirina nginx-ê ji bo belavkirina pêşiyê û proxykirina paşverû
  • hûn dikarin serîlêdanê di wêneyek docker de pak bikin, bi vî rengî serîlêdana min dê li ku derê hebe docker bixebite, pirsgirêka belavkirinê tavilê çareser dibe
  • vedîtina karûbarê ji qutiyê, hûn dikarin mîkroxizmetan biafirînin, her konteynir (bi tora hevpar ve girêdayî ye) dikare bi hêsanî bi navekek din bigihîje, pir rehet
  • Kêfxweş e ku meriv konteynerek çêbikin û tê de "lîstin".

Tiştê ku ez her gav di derbarê docker de jê hez nakim:

  • Ji bo ku serîlêdana min bixebite, ez hewceyê Docker bixwe li ser serverê heye. Ger serlêdanên min li ser jre an nodejs-ê dimeşînin û hawîrdora wan jixwe li ser serverê ye çima ez hewceyê vê yekê dikim?
  • ger ez dixwazim wêneya xweya herêmî (taybet) ku li ser serverek dûr hatî çêkirin bimeşînim, wê hingê ez hewceyê depoya xweya dokerê heye, ez hewce dikim ku qeyd li cîhek bixebite û ez jî hewce dikim https-ê mîheng bikim, ji ber ku docker cli tenê li ser https dixebite. Oh delal... vebijark hene, bê guman, ku hûn wêneyê bi navgîniya herêmî tomar bikin docker save û tenê wêneyê bi rêya scp bişîne... Lê ew gelek tevgerên laş e. Wekî din, heya ku depoya weya we xuya nebe, ew wekî çareseriyek "qirçê" xuya dike
  • docker-compose. Ew tenê ji bo rêvekirina konteyneran hewce ye. Navê pêger. Ew nikare tiştekî din bike. Docker-compose komek guhertoyên pelên wê, hevoksaziya xwe heye. Çi qas daxuyanî be jî, ez naxwazim belgeyên wan bixwînim. Ez ê hewceyê wê li cîhek din nekim.
  • dema ku di tîmekê de dixebitin, pir kes Dockerfile pir şaş dinivîsin, fêm nakin ka ew çawa tê girtin, her tiştê ku hewce dike û ne hewce ye li wêneyê zêde dikin, ji wêneyên ku ne di Dockerhub an depoyek taybet de ne, mîras digirin, hinan diafirînin. docker-compose pelên bi databases û tiştek berdewam dike. Di heman demê de, pêşdebiran bi serbilindî radigihînin ku Docker xweş e, her tişt ji wan re herêmî dixebite, û HR ya girîng di valahiyê de dinivîse: "Em Docker bikar tînin û ji me re berendamek bi ezmûna xebatê ya weha hewce ye."
  • Ez bi berdewamî ji ramanên li ser bilindkirina her tiştî di Docker de dihejim: postgresql, kafka, redis. Heyf e ku ne her tişt di konteyneran de dixebite, ne ku her tişt hêsan e ku meriv mîheng û xebitandin. Ev ji hêla pêşdebirên partiya sêyemîn ve tê piştgirî kirin, û ne ji hêla xwefiroşan ve. Bi awayê, pirs tavilê derdikeve holê: firoşkar ji domandina hilberên xwe li Docker xem nakin, çima ev e, dibe ku ew tiştek dizanin?
  • Pirs her gav di derbarê domdariya daneyên konteynerê de derdikeve. û dûv re hûn difikirin, ma ez tenê pelrêça mêvandar lê bikim an cildek doker biafirînim an konteynir daneya ku niha ye çêkim deprecated? Ger ez pelrêçekê siwar bikim, wê hingê pêdivî ye ku ez pê ewle bim ku uid û gid-a bikarhênerê di konteynerê de bi nasnameya bikarhênerê ku konteynir dest pê kiriye re hevaheng e, wekî din pelên ku ji hêla konteynerê ve hatine afirandin dê bi mafên root bêne afirandin. Ger ez bikar bînim volume wê hingê dê dane bi tenê di hinan de bêne afirandin /usr/* û dê heman çîrok bi uid û gid hebe wekî di bûyera yekem de. Ger hûn pêkhateyek sêyemîn dest pê dikin, hûn hewce ne ku belgeyê bixwînin û li bersiva vê pirsê bigerin: "Pêvan di kîjan pelrêça konteynerê de pelan dinivîse?"

Min her gav ji vê yekê hez nedikir ku ez neçar bûm ku pir dirêj bi Docker re mijûl bibim di qonaxa destpêkê de: Min fêhm kir ku meriv çawa konteyneran dest pê dike, ji kîjan wêneyan dest pê dike, Makefile çêkir ku navên fermanên dirêj ên Docker vedihewîne. Min ji docker-compose nefret kir ji ber ku min nexwest di ekosîstema docker de amûrek din fêr bibim. Û docker-compose up Ew min aciz kir, nemaze ger ew hîn jî li wir hev bibînin build avahî, li şûna wêneyên ku berê hatine berhev kirin. Tişta ku min bi rastî dixwest ev bû ku tenê hilberek bi bandor û zû çêkim. Lê min nikarî fêhm bikim ka meriv çawa docker bikar tîne.

Danasîna Ansible

Di van demên dawî de (sê meh berê), min bi tîmek DevOps re xebitî, ku hema hema her endamê wê li hember Docker xwedî helwestek neyînî bû. Ji ber sedemên:

  • docker qaîdeyên iptables (her çend hûn dikarin wê di daemon.json de neçalak bikin)
  • docker xelet e û em ê wê di hilberînê de bimeşînin
  • heke docker daemon têk biçe, wê hingê hemî konteynerên bi binesaziyê li gorî wê têk diçin
  • hewcedariya doker tune
  • eger makîneyên Ansible û virtual hebin çima docker

Di heman karî de, min bi amûrek din re nas kir - Ansible. Min carekê li ser wê bihîst, lê min hewl neda ku pirtûkên lîstikên xwe binivîsim. Û naha min dest bi nivîsandina karên xwe kir û dûv re dîtina min bi tevahî guherî! Ji ber ku min fêm kir: Ansible xwedan modulên ji bo xebitandina heman konteynerên dokerê, avakirina wêneyan, toran, hwd., û konteynir ne tenê herêmî, lê di heman demê de li ser serverên dûr jî dikarin werin xebitandin! Kêfxweşiya min sînor nas nedikir - Min amûrek NORMAL dît û pelên xwe yên Makefile û docker-compose avêtin, ew bi karên yaml hatin guheztin. Kod bi karanîna avahiyên mîna kêm bû loop, when, Hwd.

Docker ji bo xebitandina pêkhateyên sêyemîn ên wekî databases

Min van demên dawî bi tunelên ssh re nas kir. Derket holê ku ew pir hêsan e ku "pêşvebirin" porta serverek dûr a portek herêmî. Pêşkêşkara dûr dikare bibe makîneyek di ewr de an jî makîneyek virtual ku di VirtualBox de dixebite. Ger hevkarê min an ez hewceyê databasek (an hin pêkhateyek din a partiya sêyemîn) be, em dikarin bi tenê serverê bi vê hêmanê dest pê bikin û dema ku server ne hewce ye wê vekin. Pêşkêşkirina portê heman bandorê dide databasek ku di konteynirek docker de dixebite.

Vê fermanê porta min a herêmî ber bi serverek dûr a ku postgresql dixebitîne dişîne:

ssh -L 9000: localhost: 5432 [email parastî]

Bikaranîna serverek dûr pirsgirêk bi pêşkeftina tîmê re çareser dike. Pêşkêşkarek wusa dikare ji hêla çend pêşdebiran ve yekcar were bikar anîn; ne hewce ye ku ew karibin postgresql mîheng bikin, Docker û tevliheviyên din fam bikin. Li ser serverek dûr, heke sazkirina guhertoyek taybetî dijwar be, hûn dikarin heman databasê li Docker bixwe saz bikin. Hemî pêşdebiran pêdivî ye ku gihîştina ssh peyda bikin!

Min herî dawî xwend ku tunelên SSH fonksiyonek tixûbdar a VPN-ya birêkûpêk in! Hûn dikarin bi tenê OpenVPN an pêkanînên din ên VPN saz bikin, binesaziyê saz bikin û ji bo karanîna wê bidin pêşdebiran. Ev pir xweş e!

Xwezî, AWS, GoogleCloud û yên din salek karanîna belaş didin we, ji ber vê yekê wan bikar bînin! Ew erzan in heke hûn dema ku neyên bikar anîn wan biqewirînin. Min her gav meraq dikir çima ez ê hewceyê serverek dûr a mîna gcloud bikim, wusa dixuye ku min ew dîtin.

Wekî makîneyek virtual ya herêmî, hûn dikarin heman Alpine bikar bînin, ku bi rengek çalak di konteyneran de tê bikar anîn. Welê, an hin dabeşkirinên din ên sivik da ku makîneyê zûtir boot bike.

Rêza jêrîn: hûn dikarin û divê databas û tiştên din ên binesaziyê li ser serverên dûr an di virtualboxê de bimeşînin. Ji bo van armancan ez hewcedarê doker nakim.

Piçek di derbarê wêneyên docker û belavkirinê de

Min berê nivîsand gotar ya ku min dixwest ez ragihînim ku karanîna wêneyên docker tu garantiyek peyda nake. Wêneyên Docker tenê ji bo afirandina konteynirek docker hewce ne. Heke hûn li wêneyek docker nûve dikin, wê hingê hûn nûve dikin ku konteynerên docker bikar bînin û hûn ê tenê wan bikar bînin.

Ma we li deverek dîtiye ku pêşdebirên nermalavê hilberên xwe tenê di wêneyek docker de vedigirin?
Encama piraniya hilberan ji bo platformek taybetî pelên binary in; ew bi tenê li wêneya dockerê, ku ji platforma xwestinê mîras e, têne zêde kirin. Ma we qet meraq kiriye çima li ser dockerhub ewqas wêneyên mîna hev hene? Mînakî nginx têkevin, hûn ê 100500 wêneyên ji mirovên cihêreng bibînin. Van kesan nginx bi xwe pêş nexistin, wan bi tenê nginx-a fermî li wêneya dokera xwe zêde kirin û ji bo rehetiya destpêkirina konteyneran bi konfigurasyonên xwe zexm kirin.

Bi gelemperî, hûn dikarin wê bi tenê di tgz de hilînin, ger kesek hewce bike ku wê di docker de bimeşîne, wê hingê bila ew tgz li Dockerfile zêde bikin, ji hawîrdora xwestinê mîras bistînin û bunên din biafirînin ku serîlêdanê bixwe di tgz de naguherînin. Her kesê ku dê wêneyek docker biafirîne dê zanibe tgz çi ye û ji bo xebatê çi hewce dike. Bi vî rengî ez docker bikar tîne vir

Rêza jêrîn: Ez ne hewceyî qeydkirina dokerê me, ez ê cûreyek S3 bikar bînim an tenê hilanîna pelê mîna google drive / dropbox bikar bînim

Docker li CI

Hemî pargîdaniyên ku ez tê de xebitîm mîna hev in. Ew bi gelemperî firotgeh in. Ango, wan yek serîlêdanek, yek stûnek teknolojiyê heye (baş, dibe ku çend an sê zimanên bernamekirinê).

Van pargîdan li ser serverên xwe yên ku pêvajoya CI lê dimeşe docker bikar tînin. Pirs: Çima hûn hewce ne ku hûn li ser serverên xwe di konteynerek dokerê de projeyan ava bikin? Çima ne tenê ji bo çêkirinê jîngehek amade nakin, mînakî, pirtûkek lîstikê ya Ansible binivîsin ku dê guhertoyên pêwîst ên nodejs, php, jdk, bişkojkên ssh-ê kopî bikin, hwd li servera ku tê de avabûn çêbibe saz bike?

Naha ez fêm dikim ku ev guleyan li lingê xwe dibarîne, ji ber ku docker bi îzolebûna xwe re tu sûdê nagire. Pirsgirêkên ku min bi CI-ê re di docker de rûbirû bûn:

  • dîsa hûn ji bo avakirina wêneyek docker hewce ne. hûn hewce ne ku li wêneyek bigerin an pelê docker-a xwe binivîsin.
  • 90% ku hûn hewce ne ku hin bişkokên ssh, daneyên veşartî yên ku hûn naxwazin li wêneya dokerê binivîsin bişînin.
  • konteynir çêdibe û dimire, hemû kelûpelên bi wê re winda dibin. avakirina paşîn dê hemî girêdanên projeyê ji nû ve dakêşîne, ku dem dixwe û bêbandor e, û dem drav e.

Pêşdebir di konteynerên dokerê de projeyan ava nakin (ez carek fanek wusa bûm, bi rastî, ez di xD-ya paşîn de ji xwe poşman dibim). Di java de mimkun e ku hûn çend guhertoyan hebin û wan bi yek fermanê biguhezînin ya ku hûn niha hewce ne. Di nodejs de jî wisa ye, nvm heye.

encamê

Ez bawer dikim ku docker amûrek pir hêzdar û maqûl e, ev kêmasiya wê ye (xerîb xuya dike, erê). Bi alîkariya wê, pargîdan dikarin bi hêsanî pê ve girêdayî bibin û li cîhê hewce û ne hewce bikar bînin. Pêşdebir konteynerên xwe, hin hawîrdorên xwe dest pê dikin, dûv re ew hemî bi aramî diherike nav CI û hilberînê. Tîma DevOps cûreyek kodê dinivîse ku van konteyneran bimeşîne.

Docker tenê li ser bikar bînin ya herî dawî qonaxa xebata xwe de, di destpêkê de wê nekişîne nav projeyê. Ew ê pirsgirêkên karsaziya we çareser neke. Ew ê tenê pirsgirêkan bigihîne astek DIN û çareseriyên xwe pêşkêşî bike, hûn ê ducar kar bikin.

Dema ku docker hewce ye: Ez gihîştim wê encamê ku docker di xweşbînkirina pêvajoyek diyar de pir baş e, lê ne di avakirina fonksiyona bingehîn de

Heke hûn hîn jî biryar didin ku docker bikar bînin, wê hingê:

  • pir baldar bin
  • zorê nedin pêşdebiran ku docker bikar bînin
  • karanîna wê li yek cîhek herêmî bikin, wê li hemî depoyên Dockfile û docker-compose belav nekin

PS:

Spas ji bo xwendina we, ez ji we re di kar û barên we de biryarên zelal û rojên xebatê yên berhemdar dixwazim!

Source: www.habr.com

Add a comment